web-dev-qa-db-ja.com

Mavenプロジェクトで、すべての子モジュールに加えて親バージョンを自動的に更新するにはどうすればよいですか?

マルチモジュールプロジェクトがあります。

親POM(1.0-SNAPSHOT)
 |-module1(1.0-SNAPSHOT)
 |-module2(1.0-SNAPSHOT)
 `-module3( 1.0-SNAPSHOT)

Mvn release:prepareを実行すると、親POMにSNAPSHOTバージョンがあり、すべての依存モジュールにSNAPSHOTバージョンがないことを確認します。すべての子モジュールをスナップショットから次のリリースバージョンにどのように自動的に更新しますか?

すべてのモジュールのバージョンを自動的にインクリメントしたいと思います。

33
eugenn

リリースプラグインはそれを処理できます。 POMバージョンの更新 を確認しましたか?しかし...私は何かを得ません。 POMのバージョンをx-SNAPSHOTから新しいバージョンに変更するおよびPOMのバージョンを新しい値に変更するy-SNAPSHOTrelease:prepareリリースの準備 で説明されています。この目標を使用すると何が問題になりますか?

更新:autoVersionSubmodules パラメーターが探しているものかもしれません。 リリースの準備 の例から:

マルチモジュールプロジェクト

プロジェクトの各モジュールのバージョン番号の入力を求められます。すべてのモジュールが親POMと同じバージョンを取得したい場合は、オプションautoVersionSubmodulestrueに設定できます。これで、リリースバージョンと次の開発バージョンが1回だけ求められます。

親pom.xmlのスニペット

<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>x.y.z</version>
            <configuration>
                <goals>deploy</goals>
                <autoversionsubmodules>true</autoversionsubmodules>
            </configuration>
        </plugin>
    </plugins>
</build>
30
Pascal Thivent

マルチモジュールプロジェクトを含むpomsバージョンを柔軟に設定する方法は、 Versions Maven Plugin です。

mvn versions:set -DnewVersion=your_new_version

マルチモジュールプロジェクトのすべてのPOMバージョン、親バージョン、および子バージョンを調整します。

それから

mvn versions:commit

または

mvn versions:revert
26
aymens
  1. すべてのサブプロジェクトのバージョンをその親pom.xmlで定義します。
  2. すべてのサブプロジェクトのバージョンが親のバージョンと同じであることを確認してください。

    <groupId>com.xyz</groupId>
    <artifactId>module-1</artifactId>
    <packaging>jar</packaging>
    
    <parent>
      <groupId>com.xyz</groupId>
      <artifactId>xyz-parent</artifactId>
      <version>1.0.123-SNAPSHOT</version>
    </parent>
    

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">
    
      <modelVersion>4.0.0</modelVersion>
      <artifactId>xyz-parent</artifactId>
      <groupId>com.xyz</groupId>
      <version>1.0.123-SNAPSHOT</version>
      <packaging>pom</packaging>
      <name>xyz-parent</name>
    
      <dependencyManagement>
        <dependencies>
    
        <!-- Message -->
        <dependency>
          <groupId>com.xyz</groupId>
          <artifactId>module-1</artifactId>
          <version>${project.version}</version>
        </dependency>
    
        <dependency>
          <groupId>com.xyz</groupId>
          <artifactId>module-2</artifactId>
          <version>${project.version}</version>
        </dependency>
    
      </dependencyManagement>
    </project>
    
  3. 別のpom.xmlを作成して、それらのプロジェクトをグループ化します。

    <modules>   
      <module>../xyz-parent</module>
      <module>../module-1</module>
      <module>../module-2</module>      
    </modules>
    
  4. 次に、親プロジェクトのバージョンを更新し、以下のコマンドでビルドします。

    mvn versions:set -DnewVersion=1.0.1004-SNAPSHOT
    mvn clean install
    
  5. 次に、これらのサブプロジェクトで定義されている親のバージョンをlatsetに更新します

    mvn -N versions:update-child-modules
    
  6. 次に、それらを一緒にビルドします。

    @echo on
    cd   .\xyz-parent
    call mvn versions:set -DnewVersion=1.0.1004-SNAPSHOT -o
    call mvn versions:commit -o
    call mvn clean install -o
    :::http://www.mojohaus.org/versions-maven-plugin/examples/update-child-modules.html
    cd ..\xyz-buildaggregate-ide
    call mvn -N versions:update-child-modules -o
    call mvn clean install -o
    
6
user3571276

https://issues.Apache.org/jira/browse/MNG-624?focusedCommentId=14415968&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#には、潜在的に優れたオプションがありますcomment-14415968

これは、明示的なバージョンをリストせずにサブモジュールpomの最上位レベルのpomを参照できないという事実の回避策です。 (これがバグMNG-624の目的です)バージョンの単一の場所(トップレベルのprofiles.xmlファイル)を持ち、すべてのpom.xmlファイル(つまり、 $ {currentVersion})

ただし、このスキームrelease:prepareでは、profiles.xmlはおそらく更新されません。

3
Eric