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

时间:2013-09-11 06:02:23

标签: java maven jar javafx

我的项目有不同的模块。

  • 每个模块都有一个pom.xml,用于指定jar包装。
  • 每个pom指的是共同的父母。
  • 在父模块中还有一个包含所有模块的pom.xml。

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

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

2 个答案:

答案 0 :(得分:42)

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

<packaging>pom</packaging>

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

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

答案 1 :(得分:14)

Maven要求父级为packaging pom

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

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

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

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

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