2009-11-05 100 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

相关问题