Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在多模块Maven项目中组装任意文件_Maven_Maven Assembly Plugin - Fatal编程技术网

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

在多模块Maven项目中组装任意文件,maven,maven-assembly-plugin,Maven,Maven Assembly Plugin,我正在尝试为一个大型(超过100个模块)多模块Maven项目创建一个程序集 一些(但不是全部)模块有各种文件需要包含在最终组装中,但我很难弄清楚如何将它们放在那里 以下是典型模块的布局: +- pom.xml +- src | +- main | +- java | +- ... | +- resources | +- ... | +- scripts | +- ... 此模块具有JAR打包,因此主要工件是一个JAR文件 以下

我正在尝试为一个大型(超过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>
+-bin
|  +- 
+-解放党
|  +- 
我知道如何完成装配结构的部分,但不知道如何完成bin部分

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

Maven就是这样做的吗?它看起来很重,很慢。有没有其他/更好的方法

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

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

  • 不要让每个模块都有自己的程序集,而是创建一个名为
    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+程序集)。然后您就有了一个名为“分发”的模块或类似的模块,它是您的程序集,可以从所有其他模块中提取内容。谢谢您的输入。不幸的是,这似乎是另一种“马文之路”与客观现实相冲突的情况:我发现的东西在马文之地太熟悉了。在这一点上,我认为我们将编写一个自定义插件来处理我们的需求。