使用Maven Jar插件生成多Jar包时无法添加指定XML资源问题
解决Maven多Jar打包时XML文件未纳入对应Jar的问题
我来帮你搞定这个XML没进Jar的问题!核心问题有两个:你当前的Jar插件配置只包含了编译后的class文件,没覆盖XML;另外如果XML是放在src/main/java的包结构里(而非默认的src/main/resources),Maven默认不会把这些XML复制到编译输出目录,Jar插件自然找不到它们打包进去。
下面分两步解决:
1. 配置资源插件,把XML同步到编译目录
如果你的XML是在src/main/java的包路径下,先添加maven-resources-plugin配置,让它把这些XML复制到target/classes对应的位置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <executions> <execution> <id>copy-java-resources</id> <phase>process-resources</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.outputDirectory}</outputDirectory> <resources> <resource> <directory>${project.build.sourceDirectory}</directory> <includes> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin>
这个配置会在process-resources阶段,把src/main/java下所有XML文件同步到编译输出目录,和class文件放在对应包路径下。如果你的XML本来就在src/main/resources里,这一步可以省略。
2. 修改Jar插件配置,纳入对应XML文件
因为你用了<includes>做精确的文件匹配,所以必须把XML路径也加到每个execution的规则里,确保对应Jar能包含目标XML:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.1</version> <executions> <execution> <id>tra_common_id</id> <goals> <goal>jar</goal> </goals> <phase>package</phase> <configuration> <finalName>tra_common</finalName> <encoding>ISO-8859-1</encoding> <classifier>tra_common</classifier> <includes> <include>com/**/common/**</include> <include>com/**/apm/*Access*</include> <!-- 加入common和apm包下的XML --> <include>com/**/common/**/*.xml</include> <include>com/**/apm/*Access*.xml</include> </includes> <excludes> <exclude>com/**/management/**</exclude> </excludes> <archive> <addMavenDescriptor>false</addMavenDescriptor> </archive> </configuration> </execution> <execution> <id>tra_client_id</id> <goals> <goal>jar</goal> </goals> <phase>package</phase> <configuration> <finalName>tra_client</finalName> <encoding>ISO-8859-1</encoding> <classifier>tra_client</classifier> <includes> <include>com/**/client/**</include> <!-- 加入client包下的XML --> <include>com/**/client/**/*.xml</include> </includes> <archive> <addMavenDescriptor>false</addMavenDescriptor> </archive> </configuration> </execution> </executions> </plugin>
完成配置后,执行mvn clean package,解压生成的Jar包就能看到对应的XML文件已经在正确的包路径下了。
内容的提问来源于stack exchange,提问作者harimper
相关产品推荐
相关产品推荐

