4

これは、マルチモジュールと親の POM を別々に持っているという点で、この前の質問とは少し異なるバージョンです: Maven プロジェクトでは、すべての子モジュールと親のバージョンを自動的に更新するにはどうすればよいですか?

POM を更新して、開発スナップショット バージョンからリリース バージョン番号に移行しようとしています。私は問題をググって死に至らしめ、リリースとバージョンのプラグインを試しましたが、かなり単純なセットアップを処理できるものは何もないようです.

公開された Maven のベスト プラクティスに従い、避けられる場合は情報を複製しないように努めた結果、マルチモジュール プロジェクトの構造は次のようになりました。共通の pom-parent.xml によって定義される単一のバージョンがあります。B は A に依存します。

標準のプラグインが、かなり基本的な設定と思われるものを処理できないことに少し驚きました。何か不足しているのでしょうか?

私が思いついた回避策はどれも完全に満足のいくものではありません:

  • プロパティとして製品バージョンを定義するのは少し不安定です。同じモジュール ソースが、ユーザー settings.xml またはその他のトリックのために異なるバージョンを取得する可能性があります。

  • ルート pom.xml と pom-parent.xml をマージし、ルート pom で現在管理している製品全体のビルド ステップを専用モジュールに移動します。標準プラグインが機能することを願っています...試していません。

なにか提案を?

root/pom-parent.xml: 以下のすべての POM の親

<project...>
    <groupId>acme</groupId>
    <artifactId>ParentPom</artifactId>
    <packaging>pom</packaging>
    <version>1.0.0-SNAPSHOT</version>

root/pom.xml: A と B をサブモジュールとするマルチモジュール プロジェクト

<project ...>
    <parent>
        <groupId>acme</groupId>
        <artifactId>ParentPom</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <groupId>acme</groupId>
    <artifactId>Product</artifactId>
    <packaging>pom</packaging>
    <modules>
        <module>A</module>
        <module>B</module>
    </modules>

ルート/A/pom.xml:

    <project ...>
    <parent>
        <groupId>acme</groupId>
        <artifactId>ParentPom</artifactId>
        <relativePath>../parent-pom.xml</relativePath>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <groupId>acme</groupId>
    <artifactId>A</artifactId>
    <packaging>jar</packaging>

ルート/B/pom.xml:

    <project ...>
    <parent>
        <groupId>acme</groupId>
        <artifactId>ParentPom</artifactId>
        <relativePath>../parent-pom.xml</relativePath>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <groupId>acme</groupId>
    <artifactId>B</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>acme</groupId>
            <artifactId>A</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
4

1 に答える 1

5

次のような構造がある場合:

root
 +-- pom.xml (1.0-SNAPSHOT)
 !
 +-- module1 
 !     +-- pom.xml (1.0-SNAPSHOT)
 +-- module2
       +-- pom.xml (1.0-SNAPSHOT)

root を親として使用するすべてのモジュール (module1 および module2) は、次のようになります。

<parent>
   <groupId>xxx</groupId>
   <artifactId>xxx</artifactId>
   <version>1.0-SNAPSHOT</version>
</parent>

他のプロジェクトの pluginManagement やdependencyManagement などの他のデフォルト設定も除外したい場合は、pom.xml のみを含む別の Maven プロジェクトでなければならない別の親 pom を使用する必要があります。さらに、このプロジェクトは個別に展開およびリリースされます。そうする場合、これを上記の構造のルート pom で親として使用できます。

リリースを作成する場合は、上記の構造のルート フォルダーに移動するだけで、バージョン番号などが自動的にインクリメントされます。

mvn -B release:prepare release:perform
于 2012-07-13T11:54:36.100 に答える