4

次のように定義されたモジュールを持つ親 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"

    <modelVersion>4.0.0</modelVersion>
    <groupId>parent</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.2-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>../proj1</module>
        <module>../proj2</module>
    </modules>

</project>

子モジュールの pom ファイルは次のとおりです。

proj2 pom.xml

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>parent</groupId>
        <artifactId>parent</artifactId>
        <version>1.0.2-SNAPSHOT</version>
        <relativePath>../parent/pom.xml</relativePath>
    </parent>

    <groupId>proj2</groupId>
    <artifactId>proj2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
</project>

proj1 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmln:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
     http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>parent</groupId>
        <artifactId>parent</artifactId>
        <version>1.0.2-SNAPSHOT</version>
        <relativePath>../parent/pom.xml</relativePath>
    </parent>

    <groupId>proj1</groupId>
    <artifactId>proj1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
</project>

しかし、バージョン プラグインを使用すると、モジュールではなく、親のバージョン番号が設定されるだけです。これが私が使用しているコマンドです:

versions:set -DnewVersion=1.0.2-SNAPSHOT

出力は次のとおりです。

[INFO] proj1 ...................................... SKIPPED
[INFO] proj2 ...................................... SKIPPED
[INFO] parent ......................................SUCCESS

サブモジュールはスキップされています。親だけでなく、サブモジュールも更新できるようにするにはどうすればよいですか?

更新:子モジュールからバージョンタグを削除しようとしたため、子モジュールは次のようになりました:

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>parent</groupId>
        <artifactId>parent</artifactId>
        <version>1.0.2-SNAPSHOT</version>
        <relativePath>../parent/pom.xml</relativePath>
    </parent>

  <groupId>proj2</groupId>
  <artifactId>proj2</artifactId>
  <packaging>war</packaging>
</project>    


<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
        <groupId>parent</groupId>
        <artifactId>parent</artifactId>
        <version>1.0.2-SNAPSHOT</version>
        <relativePath>../parent/pom.xml</relativePath>
    </parent>

  <groupId>proj1</groupId>
  <artifactId>proj1</artifactId>
    <packaging>war</packaging>
</project>   

ただし、子 pom ファイルではバージョン番号が更新されていません。

更新:これが私がこのプロセスがどのように機能すると思うかです。お気軽に改訂を提案してください:

理論的には (私はこれをテストしていません)、ネストされたファイル構造で Maven は、ゴール 'ons:set -DnewVersion=1.0.2-SNAPSHOT' が実行されると、各子モジュールの個々のバージョン番号を更新します。

ただし、フラット ファイル構造では、親モジュールのバージョンが同じ場合、子モジュールでバージョン番号を指定する必要はありません。これは、子のバージョン番号が設定されていない場合、親のバージョン番号が使用されるためです。したがって、親モジュールのすべての子モジュールを更新するには、親モジュールのバージョン番号を更新するだけです。すべての子モジュールにバージョン番号が設定されていない場合、親モジュールと同じバージョン番号になります。

4

3 に答える 3

2

これはおそらく役に立ちませんが、次のバグのように聞こえます: JIRA MRELEASE-261 : release:prepare should support flat directory multi-module projects

フラットな構造はお勧めしません。これは、(Eclipse ?) 開発者の「古い習慣」です。私はそれを長い間使用していましたが、Maven アプローチの利点を発見しました。

古い方法:

parent
`-- pom.xml
submodule 1
`-- pom.xml
submodule 2
`-- pom.xml

Mavenの方法:

parent
|-- submodule 1
|   `-- pom.xml
|-- submodule 2
|   `-- pom.xml
`-- pom.xml

詳細については、次を参照してください。

于 2012-09-18T12:35:34.200 に答える
1

子モジュールが親 pom を参照している場合は、子モジュール pom からバージョン タグを削除して、バージョンが親 pom から継承されるようにします。

バージョンは pom から継承されるため、バージョン プラグインを使用すると、すべてのモジュールが同じバージョンになります。

于 2012-09-18T11:28:41.960 に答える