You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Maven Assembly合并多文件为一个?当前仅复制首个文件内容

Maven Assembly 合并两个文件至manifestAB.txt的解决办法

你当前的配置里,两个<file>节点都输出到同名文件manifestAB.txt,这会导致后处理的文件覆盖前一个(或者如你所见只保留了第一个文件内容),因为默认行为是复制替换而非合并。要实现内容合并,有两种可行方案:

方案一:直接用Assembly插件的合并功能

给需要合并的文件配置相同的mergeId,并通过merge-files处理器指定合并策略:

<assembly>
    <!-- 保留你原有的其他配置 -->
    <files>
        <file>
            <source>src/resources/manifestA</source>
            <outputDirectory>./</outputDirectory>
            <destName>manifestAB.txt</destName>
            <filtered>true</filtered>
            <mergeId>manifest-merge-group</mergeId>
        </file>
        <file>
            <source>src/resources/otherDir/manifestB</source>
            <outputDirectory>./</outputDirectory>
            <destName>manifestAB.txt</destName>
            <filtered>true</filtered>
            <mergeId>manifest-merge-group</mergeId>
        </file>
    </files>

    <containerDescriptorHandlers>
        <containerDescriptorHandler>
            <handlerName>merge-files</handlerName>
            <configuration>
                <fileMerges>
                    <fileMerge>
                        <mergeId>manifest-merge-group</mergeId>
                        <!-- 按配置顺序追加内容,默认就是true,可省略 -->
                        <append>true</append>
                    </fileMerge>
                </fileMerges>
            </configuration>
        </containerDescriptorHandler>
    </containerDescriptorHandlers>
</assembly>

关键细节

  • 相同mergeId的文件会被插件识别为需要合并到同一目标文件
  • append=true确保内容按你配置的文件顺序追加,若需要覆盖可设为false(但这不是你要的合并效果)
  • 确保使用的maven-assembly-plugin版本在3.0.0及以上,旧版本可能不支持该合并特性

方案二:先用Resources插件合并,再用Assembly复制

如果Assembly插件的合并功能不生效,可先用maven-resources-plugin预先合并文件,再让Assembly复制合并后的结果:

首先在pom.xml中添加Resources插件配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.3.1</version>
    <executions>
        <execution>
            <id>concat-manifests</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>concat</goal>
            </goals>
            <configuration>
                <outputFile>${project.build.directory}/manifestAB.txt</outputFile>
                <files>
                    <file>src/resources/manifestA</file>
                    <file>src/resources/otherDir/manifestB</file>
                </files>
                <filtered>true</filtered>
            </configuration>
        </execution>
    </executions>
</plugin>

然后修改assembly.xml,复制已经合并好的文件:

<files>
    <file>
        <source>${project.build.directory}/manifestAB.txt</source>
        <outputDirectory>./</outputDirectory>
        <destName>manifestAB.txt</destName>
    </file>
</files>

内容的提问来源于stack exchange,提问作者KPrince36

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:10:23