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

Anv*_*vay 33 java javafx jar maven

我的项目有不同的模块.

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

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

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

ben*_*n75 46

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

<packaging>pom</packaging>
Run Code Online (Sandbox Code Playgroud)

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

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


San*_*gen 15

Maven要求父母成为packaging pom.

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

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

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

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

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