4

私のプロジェクトは次のように構成されています。

.
 |--module
 |  `-- pom.xml
 |  --submodule
 |    `-- pom.xml
 `-- pom.xml

POM(簡略化):

  • 計画:
<project>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>project</artifactId>
    <name>Project</name>
    <groupId>org.myorg</groupId>
    <version>1.0.6-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>module</module>     
    </modules>
    (...)
</project>
  • モジュール:
<project>
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.myorg</groupId>
        <artifactId>project</artifactId>
        <version>1.0.6-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>module</artifactId>
    <name>Module</name>
    <groupId>org.myorg</groupId>
    <version>1.0.6-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>submodule</module>      
    </modules>
    (...)
</project>
  • サブモジュール:
<project>
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.myorg</groupId>
        <artifactId>module</artifactId>
        <version>1.0.6-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>submodule</artifactId>
    <name>Submodule</name>
    <groupId>org.myorg</groupId>
    <version>1.0.6-SNAPSHOT</version>
    <packaging>jar</packaging>
    (...)
</project>

maven installPOMのプロジェクトまたはモジュールで実行すると、プロジェクトは正常にビルドされます。ただし、サブモジュールで実行すると、次のエラーが発生します。

プロジェクトサブモジュールで目標を実行できませんでした:アーティファクトorg.myorg:project:pom:1.0.6が見つかりませんでした-SNAPSHOT

サブモジュールがPOMプロジェクトを見つけられないのはなぜですか?相対パスが指定されます。

4

2 に答える 2

6

私が最初に気付いたのは、親を持つすべてのサブモジュールに次の行が含まれていることです。

<relativePath>../pom.xml</relativePath>

これは役に立たないので、Mavenのデフォルトであるか、言い換えれば単に削除するだけです。

さらに、マルチモジュールビルドでは、バージョンを定義しないでください。groupIdが常に同じである場合は、groupIdも省略できます。これにより、現在のモジュールがその親からバージョンを継承します。

モジュール:pom.xml

<project>
    <parent>...
    </parent>    
    <artifactId>module</artifactId>
    <packaging>pom</packaging>

    <name>Module</name>

    <modules>
        <module>submodule</module>      
    </modules>
    (...)
</project>

それとは別に、サブモジュールに入って呼び出すことはできません

mvn install

マルチモジュールビルドの別のモジュールをインストールする場合は、次のようなものを使用する必要があります。

mvn -amd -pl submodule install

これはあなたがやりたいことをしますが、あなたが何をしているのかを正確に理解していない限り、通常は完全なマルチモジュールビルドをインストールする必要があります。オプション-amdは、-also-make-dependentsの省略形です。-plは、呼び出し中に作成する必要があるプロジェクトのリストを定義する--projectsの省略形です。

于 2013-02-19T13:57:19.093 に答える
4

まず、ルート プロジェクトで実行する必要がありますmvn install。これにより、ローカルの Maven リポジトリにアーティファクトが作成されます。2 回目以降は、サブモジュールのみ実行できます。ルート プロジェクトで実行しない場合、maven はプロジェクトのアーティファクトを作成しないため、サブ モジュールで実行すると、maven リポジトリからアーティファクトを見つけることができません。

于 2014-02-18T06:44:17.837 に答える