1

フラットなマルチモジュール レイアウトの次のシナリオを検討してください。

| parent-pom
|     - pom.xml
| module1
|     - pom.xml

parent-pom/pom.xmlすべてのモジュールの親 POM は次のとおりです。

<groupId>my-group</groupId>
<artifactId>parent-pom</artifactId>
<version>1.0.0</version>
...
...
<module>../module1</module>

現在、pom.xmlofmodule1には次のparentセクションが含まれています。

<parent>
    <groupId>my-group</groupId>
    <artifactId>parent-pom</artifactId>
    <version>1.0.0</version>
</parent>

クリーンなローカル リポジトリから始めます。事前に構築されたアーティファクトはなく、すべてがゼロから作成されます。で実行しようとすると、エラーが発生mvn installparent-pomます。これは、Maven リアクターがmy-group:base-pomローカル リポジトリを検索し、失敗して (存在しないため) を検索するため../pom.xmlです。

罰金。私の質問は次のとおりです。 のビルドが のビルドをmodule1介して呼び出される場合、Maven が親のどこparent-pomかを探す必要があるのはなぜですか? Maven が buildになると、Maven は次のことを既に認識しています。pom.xml module1

  1. のファイル システムの物理的な場所my-group:parent-pom:1.0.0
  2. module1に根ざしている事実my-group:parent-pom:1.0.0

なぜ他の場所を見るのですか?

4

1 に答える 1

0

POMの紹介: プロジェクトの継承: 例 2では、次のように説明されています。

シナリオ

ただし、親プロジェクトが既にローカル リポジトリにインストールされている場合、またはその特定のディレクトリ構造にある場合は機能します (親pom.xmlは、モジュールのディレクトリよりも 1 つ上のディレクトリですpom.xml)。

しかし、親がまだインストールされておらず、ディレクトリ構造が

.
 |-- my-module
 |   `-- pom.xml
 `-- parent
     `-- pom.xml

ソリューション

このディレクトリ構造 (またはその他のディレクトリ構造) に対処するには、<relativePath>要素を親セクションに追加する必要があります。

<project>
    <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>my-app</artifactId>
        <version>1</version>
        <relativePath>../parent/pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>my-module</artifactId>
</project>

名前が示すようにrelative path、モジュールからpom.xml親のpom.xml.

編集:

getRelativePathは次のように教えてくれました

チェックアウト内の親 pom.xml ファイルの相対パスを取得します。デフォルト値は ../pom.xmlです。Maven は、最初に現在ビルド中のプロジェクトのリアクターで親 pom を検索し、次にファイルシステム上のこの場所、次にローカル リポジトリ、最後にリモート リポジトリで検索します。relativePath を使用すると、たとえば、構造がフラットな場合、または中間の親 pom なしでより深い場合に、別の場所を選択できます。ただし、グループ ID、アーティファクト ID、およびバージョンは引き続き必要であり、指定された場所にあるファイルと一致する必要があります。そうしないと、POM のリポジトリに戻ります。この機能は、そのプロジェクトのローカル チェックアウトでの開発を強化するためだけのものです。

これが役立つことを願っています。

于 2013-03-26T08:31:04.167 に答える