2010-03-05 51 views
12

我正在嘗試使用Maven2,但是我的子項目找不到父項目。Maven2無法從相對路徑中找到父項

目錄結構如下:

--parent 
    --pom.xml 
--child 
    --pom.xml 

兒童pom.xml文件看起來像:

<parent> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>myapp</artifactId> 
    <version>${app.version}</version> 
    <relativePath>.../parent/pom.xml</relativePath> 
</parent> 

然而,當我用maven它甚至不似乎相對路徑看,它似乎嘗試從Maven存儲庫下載它。這顯然不在回購中。我想讓它看看相對路徑。我究竟做錯了什麼?這裏的錯誤消息:

[INFO] Scanning for projects... 
Downloading: http://repo1.maven.org/maven2/com/mycompany/app/myapp/${app.version}/myapp- 
${app.version}.pom 
[INFO] Unable to find resource 'com.mycompany.app:myapp:pom:${app.version}' in reposit 
ory central (http://repo1.maven.org/maven2) 
[INFO] ------------------------------------------------------------------------ 
[ERROR] FATAL ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Error building POM (may not be this project's POM). 


Project ID: null:web:jar:null 

Reason: Cannot find parent: com.mycompany.app:myapp for project: null:web:jar:null for 
project null:web:jar:null 

回答

1

它應該是:

<parent> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>myapp</artifactId> 
    <version>${app.version}</version> 
    <relativePath>../parent/pom.xml</relativePath> 
</parent> 
+0

這不是問題(只是一個錯誤的國際海事組織),這是行不通的。 – 2010-03-05 20:55:34

+0

這仍然有幫助,maven文檔在線(http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Example_2)實際上使用...我認爲這是他們的網站上的錯字 – vagabond 2010-03-12 01:19:30

11

據我所知,可變膨脹不會在父元素中工作(見MNG-624和評論爲解決此背景),你需要設定明確的版本:

<parent> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>myapp</artifactId> 
    <version>1-SNAPSHOT</version><!-- or whatever version you use --> 
    <relativePath>../parent/pom.xml</relativePath> 
</parent> 

順便說一句,如果你想使用相同的版本爲所有的模塊,你應該簡單地繼承它在你的子項目,即不能覆蓋它(沒有真正需要IMO的${app.version}),而不是相反。

+0

指向pom.xml路徑後爲我工作。 – 2013-12-16 17:22:40

1

您可能有包裝類型和/或版本ID不匹配。我得到了同樣的錯誤,但玩弄了包裝類型並使其運作。嘗試以下操作。

以下是父pom.xml的片段。包裝類型是「pom」。我沒有父應用程序的任何代碼,只有共享的pom.xml:

... 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>parent</artifactId> 
    <version>${app.version}</version> 
    <packaging>pom</packaging> 

孩子的pom.xml。這是一個Web應用程序,以便包裝類型爲「戰爭」:

<parent> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>parent</artifactId> 
    <version>${app.version}</version> 
    <relativePath>../parent/pom.xml</relativePath> 
    <packaging>war</packaging> 
</parent> 
1

的問題可能是你使用的.../代替../

+0

(你已經把「...... /」表示,而不是「../」) – tzrtzer 2013-05-31 14:32:16

7

我發現的是,您需要先安裝父pom,然後後續的子poms才能從存儲庫中讀取它們。

使用:mvn -N install

這將安裝父POM而不運行其他孩子勁歌。