228

親プロジェクト: A、サブ プロジェクト: B の 2 つのプロジェクトがあります。

A/pom.xml:

<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>

そして B/pom.xml には、次のものがあります。

    <parent>
        <groupId>com.dummy.bla</groupId>
        <artifactId>parent</artifactId>
        <version>0.1-SNAPSHOT</version>     
    </parent>

    <groupId>com.dummy.bla.sub</groupId>
    <artifactId>kid</artifactId>

B に親からバージョンを継承させたいので、私の場合、配置する必要があるの0.1-SNAPSHOTA/pom.xml. しかし、親セクションの下<version>0.1-SNAPSHOT</version>からを削除すると、maven は親のバージョンが見つからないと文句を言います。B/pom.xml

両方のpom${project.version}を避けるために、私が使用できる方法やこのようなものはありますか?01.-SNAPSHOT

4

9 に答える 9

126

${revision}Maven 3.5.0 以降、そのためにプレースホルダーを使用できます。使用方法はここに文書化されています: Maven CI Friendly Versions

要するに、親 pomは次のようになります (Apache ドキュメントから引用):

<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>18</version>
  </parent>
  <groupId>org.apache.maven.ci</groupId>
  <artifactId>ci-parent</artifactId>
  <name>First CI Friendly</name>
  <version>${revision}</version>
  ...
  <properties>
    <revision>1.0.0-SNAPSHOT</revision>
  </properties>
  <modules>
    <module>child1</module>
    ..
  </modules>
</project>

そして子ポンはこんな感じ

<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.maven.ci</groupId>
    <artifactId>ci-parent</artifactId>
    <version>${revision}</version>
  </parent>
  <groupId>org.apache.maven.ci</groupId>
  <artifactId>ci-child</artifactId>
   ...
</project>

Flatten Maven Plugin使用して、デプロイ用に専用のバージョン番号を含む pom ドキュメントを生成する必要もあります。ハウツーは、リンクされたドキュメントに記載されています。

また、@khmarbaise はこの機能について素敵なブロブ投稿を書きました: Maven: POM Files Without a Version in It?

于 2018-08-22T14:24:33.640 に答える
101

編集: Maven 3.5.0 以降、${revision}プレースホルダーを使用した優れたソリューションがあります。詳細については、 FrVaBe の回答を参照してください。以前の Maven バージョンについては、以下の元の回答を参照してください。


いいえ、ありません。常に親のバージョンを指定する必要があります。幸いなことに、ほとんどの場合に望ましいモジュールのバージョンとして継承されます。さらに、この親のバージョン宣言は Maven Release Plugin によって自動的にバンプされるため、実際には、Maven Release Plugin を使用してバージョンをリリースまたは単にバンプする限り、2 つの場所にバージョンがあることは問題ではありません。

この動作が実際にはかなり問題なく、必要な柔軟性が得られる場合があることに注意してください。継承するために以前の親のバージョンの一部を使用したい場合がありますが、それは主流のケースではありません。

于 2012-05-14T11:20:25.467 に答える
89

Maven はそのように動作するようには設計されていませんが、この目標を達成するための回避策が存在します (おそらく副作用があるため、試してみる必要があります)。秘訣は、純粋な Maven 座標ではなく相対パスを介して親を見つけるように子プロジェクトに指示し、さらにプロパティでバージョン番号を外部化することです。

親ポン

<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>${global.version}</version>
<packaging>pom</packaging>

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

こどもぽん

<parent>
   <groupId>com.dummy.bla</groupId>
   <artifactId>parent</artifactId>
   <version>${global.version}</version>
   <relativePath>..</relativePath>    
</parent>

<groupId>com.dummy.bla.sub</groupId>
<artifactId>kid</artifactId>

私は自分のプロジェクトの1つにそのトリックをしばらく使用しましたが、ビルドの開始時にmavenが多くの警告をログに記録するという事実を除いて、特定の問題はありませんでした。これはあまりエレガントではありません。

編集

Maven 3.0.4 では、このような構成は許可されないようです。

于 2012-05-14T12:04:46.843 に答える
88

バージョン IMO を更新する最も簡単な方法:

$ mvn versions:set -DgenerateBackupPoms=false

(ルート/親のpomフォルダーでそれを行います)。

POM が解析され、設定するバージョンを尋ねられます。

于 2015-07-03T12:03:32.920 に答える
18

以下を使用することもできます。

$ mvn release:update-versions -DdevelopmentVersion={version}

POM のバージョン番号を更新します。

于 2013-04-11T10:49:32.673 に答える