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

时间:2010-05-12 17:08:26

标签: java maven-2 aggregate maven maven-assembly-plugin

出于教育目的,我已经建立了一个类似的项目布局(为了更好地适应日食而持平):

-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. 产物-OPT与 - dependencies.jar
  7. 产品all.jar在
  8. 产物的全src.jar
  9. 产物的全同-dependencies.jar
  10. 其中大部分都非常简单。虽然我对聚合工件有一些问题。我已经设法在'all'模块中使用自定义程序集描述符生成product-all-src.jar,该模块下载所有非传递deps的源代码,这样可以正常工作。这项技术还允许我使用all-with-dependencies.jar。

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

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

    由于

2 个答案:

答案 0 :(得分:5)

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

至于如何构建Maven构建的一个很好的例子? Maven项目源itself。它包含您想要的所有部分,包括打包捆绑包的最终assembly

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

答案 1 :(得分:0)

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

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

[编辑]

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