如何用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
相关产品推荐
相关产品推荐

