Spring Boot Maven插件执行mvn clean package未自动生成分层Jar包问题
问题解决步骤
第一步:验证分层配置是否生效
你对分层Jar的结构存在认知偏差,开启分层配置后不会直接在可执行Jar的根目录生成四个分层文件夹,而是会在Jar内新增BOOT-INF/layers.idx分层索引文件,四个分层需要通过专用命令提取。
执行如下命令检查配置是否生效:
jar tf target/[你的可执行Jar文件名].jar | grep layers.idx
如果能正常输出BOOT-INF/layers.idx,说明分层配置已经生效,直接跳到第三步提取分层即可。
第二步:配置未生效的排查方案
如果没有找到layers.idx文件,按以下顺序排查:
- 确认
spring-boot-maven-plugin的版本与Spring Boot依赖版本完全一致,推荐通过继承spring-boot-starter-parent父Pom统一管理版本,不要单独为插件指定不一致的版本号 - 如果你是多模块项目,需要将插件的分层配置写在需要打可执行Jar的子模块Pom中,而不是仅在父Pom的pluginManagement节点中声明
- 检查执行打包命令时是否添加了
-Dspring-boot.repackage.skip=true这类跳过插件执行的参数,这类参数会导致可执行Jar生成逻辑被跳过
第三步:提取分层目录
执行官方提供的分层提取命令,即可得到你预期的四个分层目录:
java -Djarmode=layertools -jar target/[你的可执行Jar文件名].jar extract
命令执行完成后,当前工作目录会直接生成dependencies、spring-boot-loader、snapshot-dependencies、application四个目录,可直接用于Docker镜像分层构建。
内容的提问来源于stack exchange,提问作者AskMeSomething
相关产品推荐
相关产品推荐

