在多模块Maven项目中组装任意文件

时间:2012-08-27 19:09:49

标签: maven maven-assembly-plugin

我正在尝试为大型(超过100个模块)的多模块Maven项目创建一个程序集。

有些(但不是全部)模块有各种文件需要包含在最终的程序集中,但我很难弄清楚如何将它们放在那里。

这是典型模块的布局:

+- pom.xml
+- src
|  +- main
|     +- java
|        +- ...
|     +- resources
|        +- ...
|     +- scripts
|        +- ...

此模块具有JAR打包,因此主要工件是JAR文件。

这是最终装配的理想格式:

+- bin
|  +- <union of all files from src/main/scripts in the various modules>
+- lib
|  +- <union of all JAR files produced by the various modules>

我知道如何进行装配结构的 lib 部分,但我不知道如何完成 bin 部分。

This blog post似乎建议每个模块应该创建自己的程序集(本质上是一个程序集片段),然后由我的实际程序集组件聚合在一起。

这是在Maven中完成的吗?它似乎非常重量级和重量级慢。是否有不同/更好的方式?

在回答之前,请记住以下事实:

  1. 此项目使用平面模块结构(如果重要)。更改为嵌套结构不是一种选择。
  2. 我无法将脚本合并到一个模块中。即使我可以有其他任意文件也需要打包在最终的程序集中,无法在一个地方合并(我使用脚本作为一个简单的例子来说明问题)。
  3. 是的,我认为100个模块太多但我无法控制它。
  4. 鉴于大量的模块,我更喜欢一种不需要修改每个模块的解决方案。每个POM。

2 个答案:

答案 0 :(得分:0)

不是每个模块都有自己的程序集,而是创建一个名为assembly的单独模块(名称是任意的),并让您的程序集描述符使用相对路径从其他模块中获取任意文件。即。

<files>
    <file>
      <source>../config-module/target/sample-config.xml</source>
      <outputDirectory>configs</outputDirectory>
    </file>
</files>

路径../config-module假设您拥有该名称的模块。我还假设您从sample-config.xml而不是target/目录中获取src/main/whatever文件。

请注意,如果您的“任意文件”是由每个模块(即WAR)生成的Maven工件,那么可能有更多的自觉方式来完成上述操作。看到: Maven: The Complete Reference - "Best Practices"

答案 1 :(得分:0)

不幸的是,除了创建程序集程序之外,我找不到更好的答案。看起来我们将编写自己的Maven插件来处理这个要求,因为根据我们的情况使用程序集程序组件太麻烦了。