You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"]

解决方案

  1. 修正COPY命令路径
    原Dockerfile中spring-boot-loader的复制命令缺少末尾斜杠,导致整个目录被复制到镜像中,而非目录内的文件。修改为:

    COPY --from=builder application/spring-boot-loader/ ./
    
  2. 确认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>
    
  3. 验证分层提取结果
    构建镜像时添加--progress=plain参数,查看builder阶段extract命令的执行日志,确认是否生成了dependencies、spring-boot-loader、application等目录。若某个目录不存在(比如snapshot-dependencies),可移除对应的COPY命令,避免无效操作。

  4. 检查JDK版本兼容性
    确保openjdk:19与Spring Boot版本兼容,若Spring Boot版本较低,建议更换为匹配的JDK版本(如Spring Boot 3.x推荐JDK 17+)。


内容的提问来源于stack exchange,提问作者Viktar Nikanenka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:52:50