Maven技巧:从依赖中提取指定文件并打包到自身项目Jar包根目录
解决方案
你的方案完全可行:在process-resources阶段将DependencyA中的指定XML文件提取到${project.build.directory}/classes目录,后续Maven打包时会自动将该目录下的内容包含到Jar包根目录中。推荐使用maven-dependency-plugin来实现这个需求,它专门用于处理Maven依赖的解压、复制等操作。
具体配置示例
在你的MyProject的pom.xml中添加以下插件配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.1</version> <executions> <execution> <id>unpack-specific-xmls</id> <phase>process-resources</phase> <goals> <goal>unpack</goal> </goals> <configuration> <!-- 指定要处理的依赖 --> <artifactItems> <artifactItem> <groupId>your.group.id</groupId> <!-- 替换为DependencyA的groupId --> <artifactId>DependencyA</artifactId> <version>your.version</version> <!-- 替换为DependencyA的版本号 --> <type>jar</type> <!-- 精确指定要提取的XML文件 --> <includes> folder1/file11.xml, folder1/file12.xml, folder2/file21.xml </includes> <!-- 输出目录:提取的文件会直接放到classes根目录 --> <outputDirectory>${project.build.directory}/classes</outputDirectory> <!-- 移除原文件的目录前缀,让XML直接输出到目标目录根 --> <unpackOptions> <stripPaths>folder1,folder2</stripPaths> </unpackOptions> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> </plugins> </build>
配置说明
<phase>process-resources</phase>:指定插件在process-resources阶段执行,确保文件在编译前就被放到classes目录,打包时能被包含进Jar。<includes>:精确匹配需要提取的XML文件,避免解压依赖中不必要的内容。<stripPaths>folder1,folder2</stripPaths>:去掉原文件的目录层级,让XML文件直接存放到classes根目录,最终打包后出现在MyProject.jar的根目录下。<outputDirectory>:指定提取后的文件存放路径,对应Maven的编译输出目录。
执行mvn package后,生成的MyProject.jar根目录下就会包含你需要的三个XML文件。
内容的提问来源于stack exchange,提问作者Zak
相关产品推荐
相关产品推荐

