我的项目有不同的模块。
当我尝试使用父模块的pom.xml打包时,它显示错误 - “打包jar无效聚合器项目需要pom作为打包”。
如何从maven制作应用程序的可执行jar?
答案 0 :(得分:42)
简而言之:如果您的父聚合器项目不包含源代码(这是一个很好的做法),只需将其添加到您的父pom.xml:
<packaging>pom</packaging>
如果父项目包含源代码,我强烈建议您:
commons
)commons
成为您父项目的子模块commons
模块添加为需要它的所有其他模块的依赖项(可能全部)<packaging>pom</packaging>
答案 1 :(得分:14)
Maven要求父级为packaging
pom
。
通过包含一堆插件执行并将它们附加到后续生命周期阶段,您可以使pom
项目的行为就像它是jar
项目一样。这不是一条快乐的道路。相反,以下是。
从面向对象的角度来看,你想要的是什么?你有一个由一堆其他物体组成的物体,对吧?换句话说,组合,而不是继承。
您的最终交付是由其他(jar
)项目组成的,即其他项目是最终交付项目的依赖项。您将其他项目定义为dependency
,以便任何使用您的最终交付的人都知道要获得什么(传递)依赖项。或者,最终交付jar
可以打包为"uber-jar
",因此包含其所有依赖项。这一切都取决于最终交付的使用方式。
同时,以下两个方面(可能)仍然存在:
parent
配置引用父项的任何项目。modules
的项目,可以一次轻松构建。模块是使用modules.module
引用的项目。这通常(我猜是> 99%)在父项目中完成,但不一定。你也可以把它放在最终交付项目中(不影响继承,因为那是一个不同的野兽),但它不典型,我不会去那里。