Spring Boot Maven插件为何在最终Jar中排除资源文件?
解决Spring Boot打包后缺失XML文件的问题
问题原因
你通过build-helper-maven-plugin的add-source目标将src/main/generated标记为Java源码目录,这只会让Maven编译该目录下的Java文件,但不会自动将该目录识别为资源目录处理XML等非Java文件。虽然target/classes中存在XML文件,但这可能是临时生成或其他插件的副作用,Spring Boot Maven Plugin在打包可执行Jar时,会基于Maven正式标记的资源目录来收集文件,未被标记为资源目录的文件可能被遗漏。
解决方案
修改build-helper-maven-plugin的配置,新增一个add-resource执行,将src/main/generated同时标记为资源目录,确保XML文件被纳入Maven的资源处理流程:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <executions> <!-- 原有的源码目录配置 --> <execution> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>src/main/generated</source> </sources> </configuration> </execution> <!-- 新增资源目录配置 --> <execution> <phase>generate-resources</phase> <goals> <goal>add-resource</goal> </goals> <configuration> <resources> <resource> <directory>src/main/generated</directory> <!-- 可选:明确指定要包含的XML文件,如需过滤可调整 --> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin>
验证步骤
执行mvn clean package后,打开生成的Jar包,检查BOOT-INF/classes目录下是否存在目标XML文件。
内容的提问来源于stack exchange,提问作者WestFarmer
相关产品推荐
相关产品推荐

