打包jar无效聚合器项目需要pom作为打包

Posted

技术标签:

【中文标题】打包jar无效聚合器项目需要pom作为打包【英文标题】:Packaging jar is invalid Aggregator project need pom as packaging 【发布时间】:2013-09-15 00:53:46 【问题描述】:

我的项目有不同的模块。

每个模块都有一个 pom.xml,用于指定 jar 打包。 每个 pom 都指向共同的父级。 在父模块中还有一个包含所有模块的 pom.xml。

当我尝试使用父模块的 pom.xml 打包时,它显示错误-“打包 jar 无效聚合器项目需要 pom 作为打包”。

如何从 maven 制作应用程序的可执行 jar?

【问题讨论】:

【参考方案1】:

Maven 要求父级是 packaging pom

您可以使pom 项目的行为与jar 项目一样,方法是包含一堆插件执行并将它们附加到它们的后续生命周期阶段。这不是一条快乐的道路。相反,下面的

从面向对象的角度来看,您想要什么?你有一个由一堆其他对象组成的对象,对吧?换句话说,组合,而不是继承。

您的最终交付由其他 (jar) 项目组成,即其他项目是最终交付项目的依赖项。您将每个其他项目定义为dependency,以便使用您最终交付的任何人都知道要获得什么(传递)依赖项。或者,最终交付 jar 可以打包为 "uber-jar",从而包含其所有依赖项。这完全取决于最终交付的使用方式。

同时以下两个方面(可能)仍然存在:

父项目(与最终交付项目不同,实际上它也可能是最终交付项目的父项目)定义了其后续子项目之间的共性,正如您应该从继承中所期望的那样。子项是通过其 POM 中的 parent 配置引用父项的任何项目。 一个定义modules 的项目,可以轻松地一次性构建。模块是使用modules.module 引用的项目。这通常(我猜 > 99%)在父项目中完成,但不一定。你也可以将它放在最终交付项目中(不影响继承,因为这是一个不同的野兽),但它是非典型的,我不会去那里。

【讨论】:

【参考方案2】:

简而言之:如果您的父聚合器项目不包含源代码(这是一个很好的做法),只需将其添加到您的父 pom.xml:

<packaging>pom</packaging>

如果父项目包含源代码,我强烈建议您:

将此代码移动到新模块中(我们称之为commons) 将commons 设为父项目的子模块 添加 commons 模块作为所有其他需要它的模块的依赖项(可能全部) 在父pom.xml中添加&lt;packaging&gt;pom&lt;/packaging&gt;

【讨论】:

以上是关于打包jar无效聚合器项目需要pom作为打包的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot+Maven聚合多项目打包成jar

maven 聚合工程中排除依赖为啥无效

Spring Boot 与 POM 打包聚合器

eclipse maven 包报错怎么解决

idea maven聚合项目创建子项目出现异常?

使用 Spring Boot 的 starter web parent 时出现无效的打包错误