我的项目有不同的模块。
- 每个模块都有一个 pom.xml 文件,指定了 jar 打包。
- 每个 pom 引用了共同的父模块。
- 在父模块中也有一个 pom.xml,包含了所有的子模块。
当我尝试使用父模块的 pom.xml 进行打包时,会显示错误 - "Packaging jar is invalid Aggregator project need pom as packaging"。
我该怎么做才能从 Maven 中创建可执行的应用程序 jar 包?
简而言之:如果您的父级聚合项目不包含源代码(这是一个好习惯),只需将以下内容添加到父级pom.xml文件中:
<modules>
<!-- modules list -->
</modules>
<packaging>pom</packaging>
如果父项目包含源代码,我强烈建议你:
commons
)commons
作为父项目的子模块commons
模块添加为所有需要它的其他模块的依赖项(可能是全部模块)<packaging>pom</packaging>
Maven要求父项目的packaging
必须是pom
。
你可以通过包含一堆插件执行并将它们附加到其后续生命周期阶段来使pom
项目表现得像一个jar
项目。但这并不是一个好的方法,相反以下是更好的方法。
从面向对象的角度来看,你想要什么?你有一个由一堆其他对象组成的对象,对吧?换句话说,这是组合,而不是继承。
你的最终交付成果由其他(jar
)项目组成,即其他项目是最终交付项目的依赖项。你将每个其他项目都定义为dependency
,以便使用你的最终交付的人知道需要获取哪些(传递的)依赖项。或者最终交付jar
可以被打包成"uber-jar
",从而包含所有它的依赖项。这真的取决于最终交付的使用方式。
同时以下两个方面(可能)仍然存在:
parent
配置引用父项目的任何项目。modules
的项目可以轻松地一次构建多个模块。模块是通过使用modules.module
引用的项目。这通常(我猜>99%)在父项目中完成,但不一定。你也可以将其放在最终交付项目中(不影响继承,因为那是一个不同的问题),但这是不典型的,我不会走那条路。