モジュールを備えたMavenプロジェクトは、いくつかのユーティリティ(jar)と、これらのユーティリティの一部を使用する場合に参照する他のPOMで構成されています。
例えば親pom.xml内
<artifactId>project-parent</artifactId>
<modules>
<module>client-ref-pom</module> (a module with just one pom.xml)
<module>server-ref-pom</module> (a module with just one pom.xml)
<module>client-utils</module> (a module with some utility classes, needs to ref. client-ref-pom)
<module>server-utils</module> (a module with some utility classes, needs to ref. server-ref-pom)
<module>utils</module> (a module with some utility classes, needs to ref. project-parent)
</modules>
そのため、utilsを使用したい別のプロジェクトがある場合、親pomとしてref-pomを参照するため、プロパティを継承できます。この目的は果たされます。
現在の問題は、モジュールutilsがref-pomをその親pomとして参照する必要がある場合(およびref-pomはその親pomとしてproject-parentを参照する)、mavenがproject-を指す 'parent.relativePath'について不平を言う場合ref-pomではなくparent。プロジェクト構造を再度検証することを提案します。
これは単なる警告であるため、プロジェクトをコンパイルすることはできますが、mavenが満足し、私の目的が果たされるようにプロジェクト構造を設定する適切な方法を疑問に思います。
親プロジェクトを解決するために、これらの可能なソースがチェックされます:
明示的に指定されない場合、相対パスはデフォルトで..
になります。つまり、現在のプロジェクトの親ディレクトリにあるpomです。そのため、Mavenは、a)そのディレクトリにpomファイルがあるかどうか、b)そのpomファイルに現在のプロジェクトの親定義で指定されているものと同じ座標が含まれているかどうかをチェックします。
A)とb)が真の場合、そのPOMファイルは有効なPOMの解決の親として使用されます。
A)がtrueで、b)がfalseの場合、警告が表示されます。これは通常、プロジェクトの構成が正しくないことを示し(あなたの場合)、pomは無視されるためです。
A)がfalseの場合、他のソースがチェックされます。
したがって、あなたの場合、utils/pom.xmlに次のものがあると仮定します
<parent>
<groupId>...</groupId>
<artifactId>ref-pom</artifactId>
<version>..</version>
</parent>
暗黙的に<relativePath>..</relativePath>
が含まれます。そのため、Mavenはutilsの親ディレクトリをチェックし、POMを見つけますが、このポイントには、予想されるproject-parent
ではなくref-pom
という名前が付けられます。したがって、警告。
以下が機能します:
<parent>
<groupId>...</groupId>
<artifactId>ref-pom</artifactId>
<version>..</version>
<relativePath>../ref-pom</relativePath>
</parent>
(テキストにはref-pomについて書いていますが、上記のモジュールにはclient-ref-pom
とserver-ref-pom
しかありません)
ただし
あなたの場合、個別の*-ref-pom
モジュールが本当に必要な場合、またはそれらのpomsのコンテンツがそれぞれの*-util
の内側に配置することができ、そうすべきかどうか、これが本当にあなたが望むものかどうかを考える必要がありますモジュール。