1

マルチモジュール Maven プロジェクトをリリースしようとしていますが、POM のバージョン番号を適切に更新する方法がわかりません。

Maven リリース プラグインは、親 POM の dependencyManagement セクションのバージョンを更新しません。これは既知のバグのようです。

バージョン プラグインを使用しようとしましたが、2 つの問題があります。

  • プラグインはトップレベルの POM のみを更新します。おそらく、マルチモジュール プロジェクトの POM がモジュールの POM の親 POM ではないためです。
  • さらに重要なことに、リリースプラグインの動作を模倣して、POM の現在のバージョン (1.0.0-SNAPSHOT など) から設定するバージョン (1.0.0 など) を自動的に計算するにはどうすればよいですか?

スクリプトを使用せず、dependencyManagement の外部で依存関係のバージョンを宣言する必要がないという提案をいただければ幸いです。

4 つの POM (モジュール サブディレクトリ内のモジュール POM) は次のとおりです。

============ pom-parent.xml ==================
<?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>

    <groupId>com.acme</groupId>
    <artifactId>dummy-parent</artifactId>
    <version>2.5</version>

    <packaging>pom</packaging>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.acme</groupId>
                <artifactId>module1</artifactId>
                <version>1.0.0-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

============= マルチモジュール pom: pom.xml ================

<?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>

    <parent>
        <groupId>com.acme</groupId>
        <artifactId>dummy-parent</artifactId>
        <relativePath>pom-parent.xml</relativePath>
        <version>2.5</version>
    </parent>

    <groupId>com.acme</groupId>
    <artifactId>multi-module</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <packaging>pom</packaging>

    <modules>
        <module>module1</module>
        <module>module2</module>
    </modules>
    <scm>
           <developerConnection>scm:svn:https://svnserver.fairisaac.com:8443/nowhere</developerConnection>
       </scm>
</project>

============== モジュール1 POM: モジュール1/pom.xml ================

<?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>

    <parent>
        <groupId>com.acme</groupId>
        <artifactId>dummy-parent</artifactId>
        <relativePath>../pom-parent.xml</relativePath>
        <version>2.5</version>
    </parent>

    <groupId>com.acme</groupId>
    <artifactId>module1</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <packaging>jar</packaging>
</project>

============= モジュール 2 POM: module2/pom.xml =============

<?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>

    <parent>
        <groupId>com.acme</groupId>
        <artifactId>dummy-parent</artifactId>
        <relativePath>../pom-parent.xml</relativePath>
        <version>2.5</version>
    </parent>

    <groupId>com.acme</groupId>
    <artifactId>module2</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>com.acme</groupId>
            <artifactId>module1</artifactId>
        </dependency>
    </dependencies>
</project>

========= 編集 ==============

...そして、dependencyManagementセクションの明示的なバージョンを次のように置き換えると、より良くなります

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

... maven 3.0.4 は NPE で失敗します:

[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.478s
[INFO] Finished at: Fri Apr 12 12:09:08 CEST 2013
[INFO] Final Memory: 9M/120M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.0:prepare (default-cli) on project multi-
module: Execution default-cli of goal org.apache.maven.plugins:maven-release-plugin:2.0:prepare failed. NullPointerExcep
tion -> [Help 1]
4

1 に答える 1

0

これはバグではありません。最初に示した pom.xml は、マルチモジュール プロジェクトの外部にあります。maven-release-plugin はそれを外部依存関係と見なすため、バージョンは変更されません。

しかし、あなたのデザインには欠陥があり、移動する必要があります

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.acme</groupId>
            <artifactId>module1</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</dependencyManagement>

マルチモジュール pom に。

モジュールのバージョンを 1 か所で宣言し、それをすべてのモジュールで共有することをお考えだと思います。したがって、モジュールのバージョンはマルチモジュールの pom dependencyManagement に入ります。

通常、このような外部 pom は、会社情報、リポジトリ パスなどを配置するために使用され、さまざまなプロジェクトで共有されます。

于 2013-04-19T19:23:27.163 に答える