包装jar无效Aggregator项目需要pom作为包装

  • 在我的项目中,我有不同的模块。
  • 每个模块都有pom.xml,其中包装是一个jar。
  • 每个pom指的是共同的父母。
  • 在父模块中还有一个包含所有模块的pom.xml。

    但是当我试图在父模块的pom.xml中进行打包时,它显示的错误是“打包jar无效聚合器项目需要pom作为打包”。

    我想从maven制作应用程序的可执行jar,那么这个问题的解决方案是什么,或者是否还有其他解决方案。

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

pom 

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

  • 将此代码移动到一个新模块中(让我们称之为commons
  • 使commons成为父项目的子模块
  • commons模块添加为需要它的所有其他模块的依赖项(可能全部)
  • 在父pom.xml中添加pom

Maven要求父母要packaging pom

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

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

您的最终交付是由其他( jar )项目组成的,即其他项目是最终交付项目的依赖项。 您将每个其他项目定义为dependency以便任何使用您的最终交付的人知道要获取的(传递)依赖项。 或者,最终的递送jar可以打包为“超级jar ” ,因此包含其所有依赖性。 这一切都取决于最终交付的使用方式。

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

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