我想继承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的这种行为是否正确?
答案 0 :(得分:11)
答案 1 :(得分:2)
如果您只是想继承依赖项,那么我认为它不需要输入'pom'。 你可以让它jar,只需将它指定为你作为孩子的项目的依赖项。但是,您不会拥有父/子关系,这会阻止您的父项目成为“pom”以外的类型。
要明确的是,您继承了所有依赖项(传递依赖项)的依赖项。
答案 2 :(得分:0)
如Pascal所述,行为是正确的。
如果您仍在寻找共享模块之间依赖关系的方法,您可以考虑将有问题的依赖项捆绑到一个pom中,然后让您的模块都依赖于新的“依赖关系”pom。
有关详细信息,请参阅Maven Book Section 3.6.1。