13

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

但是, Maven2 文档不是说打包类型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>

但是如果你mvn clean用上面的配置调用 Maven(例如),你会得到一个错误:

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>

在 parentpom.xml中,可以执行 Maven 而不会出现任何错误。

Maven的这种行为是否正确?

4

3 回答 3

11

POM 参考的继承部分所述:

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

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

于 2010-02-03T17:48:31.583 回答
2

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

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

于 2011-09-30T08:21:10.093 回答
0

正如 Pascal 所指出的,这种行为是正确的。

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

有关更多详细信息,请参阅Maven Book 第 3.6.1 节

于 2010-02-03T18:11:41.930 回答