2010-05-12 27 views
5

教育目的我已成立了一个项目布局,像这样(平以适合蚀越好):Maven - 用于聚合的'all'或'parent'项目?

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

家长包含核心聚集项目,选择和所有。核心实现应用程序的强制性部分。 Opt是可选部分。所有应该将核心与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,该模块下载所有非传递代码的源代码,并且工作正常。这种技术还允许我制作产品 - 所有 - 依赖项.jar。

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

因此,我在我的'所有'模块方法和抛弃'all'模块之间发生了撕裂,只是使用'parent'模块进行所有聚合。在“父母”中产生一些聚合文物,而在“全部”中产生其他文物的感觉是不清楚的。有没有在父项目中制作'产品全部'jar或在'all'项目中聚合javadoc的方法?或者我应该保持两种?

感谢

回答

5

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

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

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

+0

感谢您的提示。我只是看了一下,看起来maven的源代码遵循了我所建议的总体布局,但是没有像你指出的那样展开树。最后的程序集是IMO不是很干净,它只是为'../'目录中的所有源文件执行正则表达式grep,如果你想从3:rd方依赖关系等方面获得源代码,这并不容易。也不符合javadoc聚合器工作(通过父项目)。看起来我想要的功能不见了,当我尝试了一些功能时,我会尝试在这里写出另一种方法。感谢指针。 – 2010-06-07 13:12:35

+0

顺便说一句,src程序集可以在http://svn.apache.org/repos/asf/maven/maven-3/trunk/apache-maven/src/main/assembly/src.xml找到。 – 2010-06-07 13:13:11

0

我建议只是保持装配描述符从“全能”,将其移动到父/并相应地改变家长/ pom.xml的,然后通过执行类似mvn -f parent/pom.xml assembly:assembly创建装配。换句话说,是的,删除冗余项目“全部”,因为它只是重复了“父母”已经在做的事情。

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

[编辑]

虽然一个更大的项目,即规定,您是如何设想也许一个项目是Apache的骆驼项目。看看这里:http://camel.apache.org/source.html。有一个父/模块可以处理所有其他的事情,还有一个独立的模块用于生成apache-camel /中的实际构建发行版(在apache-camel/src // main/descriptors中有组装描述符)。也许这会更有帮助。

+0

您是否建议我应该有一位家长,只有一位父母,还有一位“聚合”,它构建了完整的产品?你应该把“dependencyManagement”放在父代还是集合呢?你能提出一个很好的示例项目吗? – 2010-05-14 07:28:10

+0

基本上是。如果你的“聚集”没有做什么比调用一个组件描述符,尽管没有必要在一个单独的模块中。这可以与最高级别的pom一起生活(可能不是与父母一样,正如我第一次提到的那样)。 应该与父pom一起生活。 如果你有很多复杂的聚合(比如......针对Windows,Linux和OSX的单独构建),那么这些聚合应该放在个别模块中。在你的情况下,它听起来像只是一个简单的程序集就可以做到。 – whaley 2010-05-14 12:05:42

+0

不好意思把这个拖出来,但是你如何为一个聚合项目制作一个完整的jar?我似乎无法弄清楚如何在不创建“全部”项目的情况下执行此操作。 – 2010-05-18 08:44:50

相关问题