2016-05-06 39 views
4

考慮與模塊Maven項目包括一些公用事業(JAR)和一些勁歌給別人參考,如果他們想使用其中的一些工具。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作爲它的父POM,使這些屬性可以繼承。這是爲了達到目的。

目前的問題是,模塊utils還需要引用ref-pom作爲它的父pom(並且ref-pom將ref-project-parent作爲它的父pom),maven正在抱怨'parent.relativePath'指向項目父母而不是反思,建議再次驗證項目結構。

由於這只是一個警告,我仍然可以編譯項目,但我不知道正確的方法來設置項目結構,使Maven是幸福的,我的目的服務。

+1

你可以顯示你的項目結構(文件夾結構)以及你的pom文件的位置。 – khmarbaise

回答

9

爲了解決父項目,這些可能的來源進行檢查:

  • relativePath
  • 本地倉庫
  • 遠程倉庫

的相對路徑,如果沒有明確給出,默認爲..,即當前項目的父目錄中的pom。因此,Maven會檢查a)該目錄中是否存在pom文件,以及b)該pom文件是否包含與當前項目的父定義中所述的座標相同的座標。

如果a)和b)都爲真,即POM文件被作爲母體的有效POM的分辨。

如果)爲真,且b)是假的,被給予警告,因爲這通常指向一個錯誤配置的項目(如你的情況)ADN的POM被忽略。

如果)是假的,其他的來源進行檢查。

所以,你的情況,我認爲你有你的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> 

(注意,在你的文字,你寫的裁判,聚甲醛,但在模塊上方只有client-ref-pomserver-ref-pom

然而

你應該考慮這是否真的是你想要的,在你的情況下,如果單獨的*-ref-pom模塊真的有必要或者如果其他poms可以並應該更好地放置在各自的*-util模塊內。

+0

真正有用的信息,謝謝!是的,我認爲可能是我真的應該將utils模塊降級到ref-pom模塊。 – user1589188