在多模块Maven项目中组装任意文件
我正在尝试为一个大型(超过100个模块)多模块Maven项目创建一个程序集 一些(但不是全部)模块有各种文件需要包含在最终组装中,但我很难弄清楚如何将它们放在那里 以下是典型模块的布局:在多模块Maven项目中组装任意文件,maven,maven-assembly-plugin,Maven,Maven Assembly Plugin,我正在尝试为一个大型(超过100个模块)多模块Maven项目创建一个程序集 一些(但不是全部)模块有各种文件需要包含在最终组装中,但我很难弄清楚如何将它们放在那里 以下是典型模块的布局: +- pom.xml +- src | +- main | +- java | +- ... | +- resources | +- ... | +- scripts | +- ... 此模块具有JAR打包,因此主要工件是一个JAR文件 以下
+- 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>
+-bin
| +-
+-解放党
| +-
我知道如何完成装配结构的库部分,但不知道如何完成bin部分
似乎建议每个模块都应该创建自己的程序集(本质上是一个程序集片段),然后由我的实际程序集组件将它们聚合在一起
Maven就是这样做的吗?它看起来很重,很慢。有没有其他/更好的方法
在回答之前,请记住以下事实:
不要让每个模块都有自己的程序集,而是创建一个名为
assembly
(名称是任意的)的单独模块,并让您的程序集描述符使用相对路径从其他模块获取任意文件。即
<files>
<file>
<source>../config-module/target/sample-config.xml</source>
<outputDirectory>configs</outputDirectory>
</file>
</files>
../config module/target/sample-config.xml
配置
路径。/config module
假定您有一个同名的模块。我还假设您从target/
目录中获取sample config.xml
文件,而不是src/main/which
目录
请注意,如果您的“任意文件”是由每个模块生成的Maven工件(即WAR),那么可能会有更多的idomatic方法来完成上述任务。见:
不幸的是,除了创建程序集的程序集,我找不到更好的答案。看起来我们将编写自己的Maven插件来处理这一需求,因为在我们的情况下,使用程序集的组装太麻烦了。有两种选择:和@yegor256:是的,我知道如何使用程序集插件;正如我在问题中所说的,我正在寻找每个模块的替代方案,声明它自己的程序集。至于shade,我不认为这能帮助我从其他模块收集任意文件。你能详细说明一下吗?除了每个模块的相对路径之外,还有什么方法可以做到这一点吗?我不想让汇编模块(我已经有了)被迫跟踪100多个模块中哪些模块有任意文件&哪些没有。源元素中是否接受通配符?是-请阅读链接书中的“8.6.2.分发(聚合)程序集”一节。正如我在OP中提到的,我希望避免程序集的组装。你的意思是说,除了组装程序集之外,没有其他好的方法可以做到这一点吗?根据链接的Maven书,组装程序集是一种可行的方法。最佳实践是每个模块应该生成一个工件(即一个JAR或WAR,但不是WAR+程序集)。然后您就有了一个名为“分发”的模块或类似的模块,它是您的程序集,可以从所有其他模块中提取内容。谢谢您的输入。不幸的是,这似乎是另一种“马文之路”与客观现实相冲突的情况:我发现的东西在马文之地太熟悉了。在这一点上,我认为我们将编写一个自定义插件来处理我们的需求。