2009-11-05 31 views
7

我正在設置一個具有扁平結構的多模塊項目,即父項和子項位於相同的基本目錄中。家長被定義爲在flat結構化多模塊中找不到父pom的子項maven build

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>company</groupId> 
    <artifactId>parent</artifactId> 
    <packaging>pom</packaging> 
    <version>1-0-SNAPSHOT</version> 
    <name>child</name> 
    <modules> 
     <module>../child</module> 
    </modules> 
(...) 

,同時它定義爲

孩子
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <parent> 
     <groupId>company</groupId> 
     <artifactId>parent</artifactId> 
     <version>1.0-SNAPSHOT</version> 
</parent> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>company</groupId> 
<artifactId>child/artifactId> 
<packaging>war</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>child</name> 
(...) 

(公司和項目名稱混淆)

什麼發生的是模塊(子)抱怨它找不到母公司,即:

Reason: Cannot find parent: company:child for project: company:child:war:1.0-SNAPSHOT for project company:child:war:1.0-SNAPSHOT 

是否有明顯的解決方案來解決這個問題,我錯過了,或者建議使用扁平化的項目結構?

編輯: 修復了一個錯字。

+4

由於某種原因,我讀這個標題爲「孩子沒有找到父母色情」......大聲笑 – Jakub 2009-11-05 16:19:19

+0

我犯了很多錯誤。 – mikek 2009-11-05 17:34:21

+1

父母使用版本'1-0',而孩子則是指'1.0' ..(注意破折號和點之間的區別)還是這是另一個錯字? – Tim 2009-11-06 10:34:53

回答

13

Introduction to the POM的​​描述使用<relativePath>元素:

<project> 
    <parent> 
    <groupId>company</groupId> 
    <artifactId>parent</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <relativePath>.../parent/pom.xml</relativePath> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>company</groupId> 
    <artifactId>child</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>child</name> 
    ... 
</project> 
+1

如果不使用'',Maven會假定父級是子級上的一個目錄級別。 – hotshot309 2012-09-13 15:54:54

+0

呵呵,給你一個新的不錯的答案吧:) – 2012-09-18 12:33:03

0

子pom沒有引用父pom,它引用了另一個名爲'build'的工件。它應該閱讀:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <parent> 
     <groupId>company</groupId> 
     <artifactId>parent</artifactId> 
     <version>1.0-SNAPSHOT</version> 
</parent> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>company</groupId> 
<artifactId>child</artifactId> 
<packaging>war</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>child</name> 
(...) 
+0

啊,對不起......那只是一個混淆錯字=)父項目被命名爲'build'IRL。 – mikek 2009-11-05 16:18:15

+0

沒問題,父母的版本呢?它的設置爲1.0-SNAPSHOT,而孩子在1.7.0-SNAPSHOT處引用父版本。 – 2009-11-05 16:23:03

+0

啊......同樣的故事。我一直在盯着這段代碼太長時間。如果我建立了父母sans孩子,那麼從此以後一切都會奏效(因爲父母在本地回購),所以這不是錯誤的問題。 – mikek 2009-11-05 16:29:18

2

父POM版本爲1-0,快照,而不是1.0快照。

+0

嗨,這個問題現在已經回答了很長時間了(而且接受的答案和你一樣)。你應該把努力放在沒有回答的問題上,並嘗試給對話帶來新的東西。祝你好運! – 2012-11-13 02:56:10

相關問題