2016-05-06 10 views
4

モジュールがいくつかのユーティリティ(jar)で構成され、他の人がこれらのユーティリティの一部を使用するかどうかを参照するいくつかのポームからなるmavenプロジェクトを考えてみましょう。親の相対パスについて文句を言うMaven

親の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のを使用したいプロパティを継承することができるように、それは、その親ポンポンとしてREF-POMに参照します。この目的は達成される。

現在の問題は、モジュールのutilsも親pomとしてref-pomを参照する必要があります(ref-pomは親pomとしてproject-parentを参照します)、mavenは 'parent.relativePath' ref-pomではなくproject-parentを指し、プロジェクトの構造をもう一度検証することを提案しています。

これは単なる警告ですが、私はまだプロジェクトをコンパイルすることができますが、プロジェクト構造をセットアップしてmavenがうれしくて、目的が達成されるようにする適切な方法がわかります。

+1

プロジェクトの構造(フォルダ構造)とpomファイルの場所を表示できますか。 – khmarbaise

答えて

9

、これらの可能性のあるソースがチェックされている親プロジェクトを解決するために:ローカルリポジトリ

  • relativePath
  • リモートリポジトリ

相対パス、明示的に与えられていない場合は、デフォルトは..です。つまり、現在のプロジェクトの親ディレクトリにあるpomです。そのため、Mavenは、a)そのディレクトリにpomファイルがあり、b)そのpomファイルに現在のプロジェクトの親定義に記載されているのと同じ座標が含まれているかどうかをチェックします。

a)とb)が真である場合、そのpomファイルは有効なpomの解決のための親として使用されます。

a)が真でb)が偽の場合、通常は誤って設定されたプロジェクト(あなたの場合のように)を指し、警告は無視されます。

a)がfalseの場合、他のソースがチェックされます。

だから、あなたのケースでは、私はあなたが暗黙的に<relativePath>..</relativePath>が含まれてあなたのutilsの中で、次の/のpom.xml

<parent> 
    <groupId>...</groupId> 
    <artifactId>ref-pom</artifactId> 
    <version>..</version> 
</parent> 

を持っていると仮定します。だから、Mavenはutilsの親ディレクトリをチェックしてPOMを見つけますが、この時点ではref-pomの代わりにproject-parentという名前が付けられています。したがって、警告。

次は動作します:

<parent> 
    <groupId>...</groupId> 
    <artifactId>ref-pom</artifactId> 
    <version>..</version> 
    <relativePath>../ref-pom</relativePath> 
</parent> 

しかし

(テキストでは、あなたはREF-ポンポンについて書くが、上記のモジュールでのみ client-ref-pomserver-ref-pomがあることに注意してください)は、

別々の*-ref-pomモジュールが本当に必要な場合や、それぞれの*-utilモジュールの中にオスポムスを置くことができます。

+0

本当に有益な情報、ありがとう!はい、私は実際にrefs-pomモジュールにutilsモジュールを1レベル下げてください。 – user1589188