2016-11-01 3 views
5

これはMaven POMに関するものです子供に与えるための親バージョンをPropertyとして持つことができますか?

私の親のバージョンも私の依存関係のバージョンにしたいのですが、私はそのプロパティの値を$ {project.parent.version}に設定する必要があります。

問題は、私の主なPOMの子(それはその中に$ {project.parent.version}プロパティを持っていますが、それは親であるため、管理していないプロジェクトです)プロパティを再計算し、作成されたPropertyの値がメインPOMのバージョンになりました。

--SuperParent (not in my Administration) | Version = 1.2.3 

----MainPom | Version = 1.0.0 | Property <test>${project.parent.version}</test> -> 1.2.3 

------Child Pom | Version 1.0.0 | Property ${test} is now 1.0.0 

<project> 
<!-- Super Pom --> 
<groupId>groupId</groupId> 
    <artifactId>artifactId</artifactId> 
    <version>1.2.3</version> 
</project> 

<project> 
<!-- MainPom --> 
    <groupId>othergroupId</groupId> 
    <artifactId>otherartifactId</artifactId> 
    <version>1.0.0</version> 
    <parent> 
     <groupId>groupId</groupId> 
     <artifactId>artifactId</artifactId> 
     <version>1.2.3</version> 
    </parent> 
    <properties> 
    <dependency.version>${project.parent.version}</dependency.version> 
    </properties> 
    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>dependencyGroupId<groupId> 
       <artifactId>dependency</artifactId> 
       <version>${dependency.version}</version> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 
</project> 
<project> 
<!-- ChildPom --> 
    <groupId>childGroupId</groupId> 
    <artifactId>childArtifactId</artifactId> 
    <version>1.0.0</version> 
    <parent> 
     <groupId>othergroupId</groupId> 
     <artifactId>otherartifactId</artifactId> 
     <version>1.0.0</version> 
    </parent> 
     <dependencies> 
      <dependency> 
       <groupId>dependencyGroupId<groupId> 
       <artifactId>dependency</artifactId> 
      </dependency> 
     </dependencies> 
</project> 

エンドに子供ポンポン1.0.0の代わり1.2.3プロパティ、$ {dependency.version}です。 これはMavenの望ましい動作ですか?私はそれを機能させるために何をすることができますか?変更することはできません

もの:

  • SuperPom
  • メインポンポンバージョン

答えて

4

Mavenの最初のプロセスの継承が有効にポンポンと、プロセス変数の拡張を構築します。

言い換えれば、親と子のpomコンテンツは、各子pomの単一の結合ファイルとして処理されます。したがって、あなたの子プロセスが処理されているとき、$ {project.parent.version}は1.2.3ではなく1.0.0です。

pomの「祖父母」を参照する方法が見つかりませんでした。唯一の解決策は、バージョンを静的な数値としてparent.versionとproperties.dependency.versionの両方に入れることです。

+0

SuperPomのバージョンが変更された場合、唯一可能な方法は2つのフィールド(親とプロパティのバージョン)を変更することです。 – Serverfrog

+0

基本的には、はい。また、変数を処理する前に親をロードしようとするため、parent.versionフィールドに変数を使用することはできません。 – Vinicius

+0

これは絶対に落ち込んでいます。 – Matthias

関連する問題