4

私は、相互に依存関係を持つ 5 つの子を持つ親プロジェクトを持っています。<parent>子 pom.xml の要素を使用した継承と<module>、親の要素を使用した集約の両方を使用しました。

私の親ポンは次のようになります。

<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.domain</groupId>
<artifactId>Parent</artifactId>
<packaging>pom</packaging>
<version>RELEASE</version>
<name>Parent</name>

<modules>
    <module>../Child1</module>
    <module>../Child2</module>
    <module>../Child3</module>
    <module>../Child4</module>
    <module>../Child5</module>
</modules>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.domain</groupId>
            <artifactId>Child1</artifactId>
            <version>RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.domain</groupId>
            <artifactId>Child2</artifactId>
            <version>RELEASE</version>
        </dependency>
    </dependencies>
</dependencyManagement>
</project>

Child3 pom は次のようになります。

<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.domain</groupId>
<artifactId>Child3</artifactId>
<name>Child3</name>
<packaging>war</packaging>

<parent>
    <artifactId>Parent</artifactId>
    <groupId>com.domain</groupId>
    <version>RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>com.domain</groupId>
        <artifactId>Child1</artifactId>
    </dependency>
    <dependency>
        <groupId>com.domain</groupId>
        <artifactId>Child2</artifactId>
    </dependency>
</dependencies>
</project>

mvn installParent または Child1 で実行すると、すべて正常に動作します。しかし、Child3 で実行すると、次のエラーが発生します。

[INFO] Failed to resolve artifact.
Missing:
----------
1) com.domain:Child1:jar:RELEASE
...
2) com.domain:Child2:jar:RELEASE

セットアップの何が問題になっていますか?

4

1 に答える 1

7

私はあなたの現在のアプローチの問題を実際に解決しようとはしませんが、この場合のベストプラクティスと私が考えるものをカバーします。採用するかどうかはお気軽に:)

まず、RELEASE(とLATEST)は特別なキーワードであり(これを認識しているかどうかはわかりません)、RELEASEここで何らかの形で誤用されていることに注意してください(バージョンが定義されている親RELEASEは実際には意味がありません)。とにかく、これらの特別なキーワードは悪い考えであり、ビルドの再現性のために非推奨になっています(Maven3でサポートされているかどうかはわかりません)。使用は避けてください。

したがって、プロジェクトが活発に開発されている場合は、代わりにSNAPSHOTバージョンを使用します。つまり、次のように親を変更します。

<project>

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.domain</groupId>
  <artifactId>Parent</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Parent</name>

  <modules>
    <module>../Child1</module>
    <module>../Child2</module>
    <module>../Child3</module>
    <module>../Child4</module>
    <module>../Child5</module>
  </modules>

</project>

要素を削除したことに注意してください。マルチモジュールビルドの内部dependencyManagement依存関係にあまり付加価値がないと思います。宣言するときは、代わりに組み込みプロパティを使用することをお勧めします。${project.groupId}${project.version}

<project>
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <artifactId>Parent</artifactId>
    <groupId>com.domain</groupId>
    <version>1.0-SNAPSHOT</version><!-- must hard code this -->
  </parent>

  <!--groupId>com.domain</groupId--><!-- you can skip this, you inherit it -->
  <artifactId>Child3</artifactId>
  <packaging>war</packaging>

  <name>Child3</name>

  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>Child1</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>Child2</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
</project>

私が書いたように、私は使用が内部dependencyManagement依存関係に本当に役立つとは思いません、そしてそれは私が私のプロジェクトをセットアップする方法です。しかし、必要に応じてできます。プロパティを使用して、情報を繰り返さないようにします。

于 2010-09-04T01:22:22.430 に答える