如何生成含Spring Boot Loader的指定结构SpringBoot可执行Jar
生成Spring Boot可执行Jar的解决方案
要生成你期望的包含BOOT-INF目录结构的可执行Jar,核心是确保spring-boot-maven-plugin执行repackage目标——该目标会将普通Jar重新打包为Spring Boot专属的可执行格式,自动生成BOOT-INF、Spring Boot Loader类和正确的MANIFEST.MF配置。
修改pom.xml配置
调整spring-boot-maven-plugin的配置,确保它在Maven的package阶段触发repackage操作:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <name>${docker.image.prefix}/${project.artifactId}</name> </image> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
核心作用说明
repackage目标会完成以下关键操作:
- 将项目编译后的类文件打包到
BOOT-INF/classes目录 - 将所有依赖Jar复制到
BOOT-INF/lib目录 - 引入Spring Boot Loader相关类到Jar根目录的
org/springframework/boot/loader路径 - 生成包含启动配置的
META-INF/MANIFEST.MF(指定Spring Boot Loader的主类和你的应用主类)
验证生成结果
执行打包命令:
mvn clean package
打包完成后,在target目录下找到生成的Jar文件,通过以下命令查看内部结构:
jar tf target/example-1.0.0-SNAPSHOT.jar
此时你会看到完全符合需求的目录结构:BOOT-INF/classes、BOOT-INF/lib、org/springframework/boot/loader以及META-INF。
额外检查点
- 确认应用主类存在:项目中必须有标注
@SpringBootApplication的主类,Spring Boot插件会自动识别它;如果主类不在默认路径,可通过<mainClass>参数手动指定。 - maven-compiler-plugin排除规则:当前配置排除了
org/**/*.java,如果你的项目中存在需要编译的org包下代码,需调整该规则避免编译遗漏。
内容的提问来源于stack exchange,提问作者mathew thomas
相关产品推荐
相关产品推荐

