1

私は次のPOM構造を持っています:

/home/projects/parent/pom.xml

<project>
   <groupId>com.my.group</groupId>
   <artifactId>project-super-parent</artifactId>
    <version>${major.version}.${minor.version}</version>
    <packaging>pom</packaging>
    <properties>
            <major.version>7</major.version>
            <minor.version>5</minor.version>
            <current.release.version>${major.version}.${minor.version}-SNAPSHOT</current.release.version>
            ...
    </properties>

    ....

</project>

/home/projects/module1/pom.xml

<project>
   <groupId>com.my.group</groupId>
   <artifactId>module1</artifactId>
    <version>${current.release.version}</version>
    <packaging>jar</packaging>


    <parent>
        <groupId>com.my.group</groupId>
        <artifactId>project-super-parent</artifactId>
        <version>${major.version}.${minor.version}</version>
        <relativePath>../parent</relativePath>
    </parent>

    ...
</project>

モジュールはその親のバージョンを認識していないことに注意してください。親で定義されたプロパティを使用するため、これは鶏と卵の問題のようなものです。

奇妙なことは、これが機能するということです。したがって、製品のメジャーバージョンを変更したい場合、単一の pom ファイル (親) のみを変更します。

このソリューションの制限は、すべての POM ファイルをファイル システムに配置する必要があることです。

私の質問は次のとおりです。それはどのように正確に機能しますか?Maven 3 にアップグレードすると動作しなくなる可能性はありますか? これは一般的に使用されている解決策ですか、それともシステムの悪用ですか?

現在 Maven 2.2.1 と Java 7 を使用しています。

4

2 に答える 2

3

これは一般的に使用されている解決策ですか、それともシステムの悪用ですか?

それは一般的ではありません。少なくとも私はこれまで見たことがありません。parent/pom.xml と module1/pom.xml にあるバージョン管理は混乱を招きます。親には 7.5 のRELEASEDバージョンがあり、module1 には 7.5 のSNAPSHOTバージョンがあります。7.5 がすでにリリースされている場合は、7.5-SNAPSHOT を開発するべきではありません。

重複を避ける最も簡単な方法は、親でのみバージョンを維持することです。module1 のバージョン宣言は省略できます。たとえば、maven-3 ソース コードなど、別のプロジェクトを見てください。バージョンが親pom でのみ宣言されており、そのpom では宣言されていないことがわかります。

maven-release-pluginは、バージョンのアップグレードを処理してリリースするのに役立ちます。

于 2013-07-18T14:27:07.677 に答える
0

子 pom から version 要素を省略すると、エラーが発生します。プロパティはメインの pom で使用でき、同じものを子の pom に継承できます。Main pom を実行すると、ビルドが成功します。問題は

  1. 子 pom を独立してビルドできないこと
  2. これは、推移的な依存関係の場合には機能しません
  3. 将来Maven 3にアップグレードすると、「解決できない親pom」というエラーが表示されます

これらの問題は、ローカル リポジトリにインストールされる前に、ビルド プロセスの一部としてプロジェクトの pom ファイルを更新できれば解決できます。

于 2015-03-26T05:03:18.360 に答える