Spring Boot容器化报错:无法找到或加载JarLauncher主类
Spring Boot分层构建Docker镜像报错:无法找到或加载主类org.springframework.boot.loader.JarLauncher
错误信息
Error: Could not find or load main class org.springframework.boot.loader.JarLauncher
我的分层Dockerfile内容
FROM openjdk:19 as builder WORKDIR application ARG JAR_FILE=target/payment-service-0.0.1-SNAPSHOT.jar COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract FROM openjdk:19 WORKDIR application COPY --from=builder application/dependencies/ ./ COPY --from=builder application/spring-boot-loader ./ COPY --from=builder application/snapshot-dependencies/ ./ COPY --from=builder application/application/ ./ EXPOSE 8080 ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
执行的控制台命令
mvn clean package spring-boot:repackage docker build -t payment-service . docker run --network test_net --name payment-service -d payment-service
target文件夹结构
target目录下包含payment-service-0.0.1-SNAPSHOT.jar文件,以及classes、generated-sources、generated-test-sources、maven-archiver、maven-status、test-classes等子目录。
可正常运行的简单Dockerfile
FROM openjdk:19 COPY target/payment-service-0.0.1-SNAPSHOT.jar payment-service.jar ENTRYPOINT ["java", "-jar", "/payment-service.jar"]
解决方案
修正COPY命令路径
原Dockerfile中spring-boot-loader的复制命令缺少末尾斜杠,导致整个目录被复制到镜像中,而非目录内的文件。修改为:COPY --from=builder application/spring-boot-loader/ ./确认Spring Boot插件配置
确保pom.xml中正确配置spring-boot-maven-plugin,否则spring-boot:repackage无法生成包含JarLauncher的可执行jar:<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>验证分层提取结果
构建镜像时添加--progress=plain参数,查看builder阶段extract命令的执行日志,确认是否生成了dependencies、spring-boot-loader、application等目录。若某个目录不存在(比如snapshot-dependencies),可移除对应的COPY命令,避免无效操作。检查JDK版本兼容性
确保openjdk:19与Spring Boot版本兼容,若Spring Boot版本较低,建议更换为匹配的JDK版本(如Spring Boot 3.x推荐JDK 17+)。
内容的提问来源于stack exchange,提问作者Viktar Nikanenka
相关产品推荐
相关产品推荐

