0

我正在尝试为一个大型(超过 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部分。

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

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

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

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

2 回答 2

0

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

于 2012-08-31T16:42:38.880 回答
0

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

<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:完整参考 - “最佳实践”

于 2012-08-27T20:27:00.167 回答