不使用项目聚合(多模块)时是否需要打包类型'pom'?

时间:2010-02-03 17:10:56

标签: inheritance maven-2 packaging pom.xml

我想继承Maven 2.2.1中子项目中(父)pom.xml的依赖关系;即使用项目继承。在这种情况下,似乎有必要将默认包装类型从jar更改为pom

但是,the Maven2 documentation没有声明包装类型pom是项目聚合所必需的,即使用子模块而不是项目继承的多模块项目?

<project>
 <modelVersion>4.0.0</modelVersion>
 <groupId>example</groupId>
 <artifactId>example-parent</artifactId>
 <version>1</version>

 <dependencies>
   <dependency>
     <groupId>log4j</groupId>
     <artifactId>log4j</artifactId>
     <version>1.2.14</version>
   </dependency>
 </dependencies>
</project>

<project>     
 <parent>
   <groupId>example</groupId>
   <artifactId>example-parent</artifactId>
   <version>1</version>
 </parent>

 <modelVersion>4.0.0</modelVersion>
 <groupId>example</groupId> 
 <artifactId>example-child</artifactId>
</project>

但如果您使用上述配置调用Maven(例如mvn clean),则会收到错误消息:

Project ID: example:example-child

Reason: Parent: example:example-parent:jar:1 
 of project: example:example-child has wrong packaging: jar.
Must be 'pom'. for project example:example-child

另一方面,使用以下条目:

<project> 
 ... 
 <packaging>pom</packaging>
 ... 
</project>
在父pom.xml

,可以毫无错误地执行Maven。

Maven的这种行为是否正确?

3 个答案:

答案 0 :(得分:11)

InheritancePOM Reference部分所述:

  

聚合(多模块)项目所需的打包类型为pom

所以Maven的行为对我来说似乎是正确的(错误信息很好地自我解释)。

答案 1 :(得分:2)

如果您只是想继承依赖项,那么我认为它不需要输入'pom'。 你可以让它jar,只需将它指定为你作为孩子的项目的依赖项。但是,您不会拥有父/子关系,这会阻止您的父项目成为“pom”以外的类型。

要明确的是,您继承了所有依赖项(传递依赖项)的依赖项。

答案 2 :(得分:0)

如Pascal所述,行为是正确的。

如果您仍在寻找共享模块之间依赖关系的方法,您可以考虑将有问题的依赖项捆绑到一个pom中,然后让您的模块都依赖于新的“依赖关系”pom。

有关详细信息,请参阅Maven Book Section 3.6.1