2016-06-15 2 views
2

私は以下のpom定義(下)を持っています。Maven:親pomを参照するときに単一バージョンの定義を再利用

私は多くの子供ポム(50プロジェクト)を持っています。例えば、1.0から1.1に移動するときなど、各リリースのすべてのポムを更新する必要があります。

バージョンを1つの場所に定義して、すべてのPOMで再利用するにはどうすればよいですか?

EDIT - 要求に関するいくつかの動機:私はバージョンを切り替えたときに、できるだけ小さなフットプリントをしたいのですが。変更するファイルはほとんどありません。プッシュすることはほとんどありません。その他

EDIT - 親がロードされる前に親プロパティを使用することはできません。

<parent> 
    <groupId>info.fastpace</groupId> 
    <artifactId>parent</artifactId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 

<artifactId>child-1</artifactId> 
+0

私は光っている解決策に気づいていません。たとえば、範囲を使用するなど、できることがいくつかあります。 https://www.igorkromin.net/index.php/2015/11/08/getting-around-mavens-parent-child-project-version-dependency-issue/を参照してください。これには、Maven計画についてもいくつかの洞察があります。 – wemu

+1

あなたは間違ったことをする必要があります。 'maven-release-plugin'はそれを自動的に行い(POMのバージョンを更新します)、プロジェクトをリリースする際に使用する必要があります。 – Tunaki

+0

@Tunaki - リリース後、どのようにpomファイルのバージョンを更新しますか? –

答えて

0

mavenプロパティを使用すると、単一のバージョン番号付けスキームを構築できます。

​​

そして、このようにそれを参照します:このように

<version>${my.version}</version> 

は、詳細についてはこちらをご覧ください: Maven version with a property

+0

バージョンは、各子pom(プロパティ内)でまだ定義されていなければなりません。 –

1

私は親のプロパティを使用して、代わりに相対パスを使用して親を参照することができますバージョンの。例:

親:

<groupId>info.fastpace</groupId> 
<artifactId>parent</artifactId> 
<version>${global.version}</version> 

<properties> 
    <!-- Unique entry point for version number management --> 
    <global.version>1.0-SNAPSHOT</global.version> 
</properties> 

子供:

<parent> 
    <groupId>info.fastpace</groupId> 
    <artifactId>parent</artifactId> 
    <version>${global.version}</version> 
    <relativePath>..</relativePath> 
</parent> 

<artifactId>child-1</artifactId> 

デメリット:ファイルシステム内に存在し、すべての開発者が同じ相対を使用するために、親のポンポンが必要ですファイル構造。

詳細情報hereを参照してください。

+0

ここからhttp://stackoverflow.com/questions/10582054/maven-project-version-inheritance-do-i-have-to-specify-the-parent-version –

+1

これは良い考えでも必要でもありません。より良いバージョンを使用する - それはプラグインまたはリリースプラグインです。あるいはそれをサポートするMaven 3.2.1以上を使用しなければなりません。 [Maven 3.2.1のリリースノートを参照](http://maven.apache.org/docs/3.2.1/release-notes.html) – khmarbaise

+0

@khmarbaise - 自由に回答を投稿できます。 –

-1

同じリリースの依存関係が複数ある場合は、プロパティの使用をお勧めします。代わりに

<project> 
    ... 
    <properties> 
     ... 
     <dep.jooq.version>3.7.3</dep.jooq.version> 
     ... 
    </properties> 
    ... 
    <dependencies> 
     ... 
     <dependency> 
      <groupId>org.jooq</groupId> 
      <artifactId>jooq</artifactId> 
      <version>${dep.jooq.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jooq</groupId> 
      <artifactId>jooq-meta</artifactId> 
      <version>${dep.jooq.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jooq</groupId> 
      <artifactId>jooq-codegen</artifactId> 
      <version>${dep.jooq.version}</version> 
     </dependency> 
     ... 
    </dependencies> 
    ... 
</project> 

、あなたはPOMファイルに異なる点で同じ依存関係を使用するために持っているか、あなたはモジュールであり、あなたは親の同じ依存関係のバージョンを使用する場合は、私が使用することをお勧めしている場合:たとえば、次のようにしてください:

<project> 
    ... 
    <dependencyManagement> 
     <dependencies> 
      ... 
      <dependency> 
       <groupId>group-a</groupId> 
       <artifactId>artifact-a</artifactId> 
       <version>1.0</version> 
      </dependency> 
      ... 
     <dependencies> 
    </dependencyManagement> 
    ... 
    <dependencies> 
     ... 
     <!-- The following block could be in a module --> 
     <dependency> 
      <groupId>group-a</groupId> 
      <artifactId>artifact-a</artifactId> 
      <!-- It is no more ncessary to use the version --> 
     </dependency> 
     ... 
    <dependencies> 
    ... 
</project> 
+0

これはどのようにして親pomバージョンの問題を解決しましたか? –

+0

単一モジュールのPOMファイルで、依存関係のバージョンを指定できます。親POMを使用する場合、** dependencyManagement **のバージョンはサブモジュールのバージョンを上書きします。 – Sandro

関連する問題