Maven – 聚合的“全部”或“父母”项目?

出于教育目的,我已经建立了一个像这样的项目布局(为了更好地适应日食):

-product | |-parent |-core |-opt |-all 

Parent包含一个包含core,opt和all的聚合项目。 Core实现了应用程序的强制部分。 Opt是可选部分。 所有这些都应该将core与opt结合起来,并将这两个模块列为依赖项。

我现在正在尝试制作以下工件:

  1. 产品core.jar添加
  2. 产品核心src.jar
  3. 产品的核心与 – dependencies.jar
  4. 产品opt.jar
  5. 产品-OPT-src.jar
  6. 产品选择与 – dependencies.jar
  7. 产品all.jar在
  8. 产品全src.jar
  9. 产品全有,dependencies.jar

他们中的大多数生产相当简单。 我确实有一些聚合工件的问题。 我已经设法在’all’模块中使用自定义程序集描述符生成product-all-src.jar,该模块下载所有非传递deps的源代码,这样可以正常工作。 这项技术还允许我使用all-with-dependencies.jar。

然而,我最近发现您可以在源插件中使用source:aggregate目标来聚合整个聚合项目的源。 对于javadoc插件也是如此,它也通过父项目的使用进行聚合。

所以我在’all’模块方法和放弃’all’模块之间徘徊,只使用’parent’模块进行所有聚合。 在’父’中产生一些聚合工件并且在’all’中产生其他产品感觉不干净。 有没有办法在父项目中制作’product-all’jar,或者在’all’项目中聚合javadoc? 或者我应该保留两者?

谢谢

扁平的树木不再经常使用。 这是几年前完成的,用于处理Eclipse如何处理项目以及缺乏良好的Maven和Eclipse集成。 如果使用m2eclipse将Maven项目导入Eclipse,那么对于maven典型的嵌套树,您将不会遇到任何问题。

至于如何构建Maven构建的一个很好的例子? Maven项目源本身 。 它拥有您想要的所有部件,包括打包捆绑包的最终组件 。

典型的嵌套结构具有自上而下的层次结构,其中父进程正在对其下面的模块进行聚合,并且子进程从父进程inheritance值。 虽然这些可以并且有时是分开的,但这不是常态。

我建议只保留汇编描述符“all”,将其移动到parent /并相应地更改parent / pom.xml,然后通过执行mvn -f parent/pom.xml assembly:assembly类的操作来创建该mvn -f parent/pom.xml assembly:assembly 。 换句话说,是的,删除“全部”的冗余项目,因为它只是复制了“父”已经在做的事情。

另外,如果它是一个聚合项目而不仅仅是父pom.xml,那么“父”似乎是该项目的一个糟糕的命名选择。

[编辑]

虽然是一个更大的项目,也许是一个如你所设想的项目是apache camel项目。 请在此处查看: http : //camel.apache.org/source.html 。 有一个父/模块可以处理所有其他内容,还有一个单独的模块用于在apache-camel /(在apache-camel / src // main / descriptors中使用程序集描述符)生成实际的构建发行版。 也许这将是一个更多的帮助。