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

SpringBoot项目Docker容器化启动时遭遇ClassNotFoundException问题求助

解决Spring Boot Docker容器化时的ClassNotFoundException问题

从你给出的错误信息和配置来看,核心问题出在Docker构建阶段的源码复制路径错误,导致Maven打包出来的JAR包没有包含编译后的类文件,进而在容器启动时找不到主类com.example.Application。下面一步步给你解决:

1. 修正Dockerfile的源码复制路径

你的build阶段中,COPY src /src会把本地的src目录复制到容器的根目录(/src),而不是当前工作目录/build下。Maven在/build目录执行打包命令时,找不到预期的src/main/java等源码目录,自然无法编译出类文件,最终生成的JAR是空的或者缺失必要的类。

修改Dockerfile的build阶段部分:

# syntax=docker/dockerfile:1
FROM maven:3.6-jdk-11 AS build
WORKDIR /build
# 把src复制到当前工作目录下的src文件夹,而不是根目录
COPY src ./src
COPY pom.xml .
RUN mvn clean package -DskipTests

FROM openjdk:11-jre-slim AS runtime
WORKDIR /app
# 只复制需要的JAR包,而不是整个target目录,更简洁
COPY --from=build /build/target/app-1.0-SNAPSHOT.jar .
CMD ["java" ,"-jar", "app-1.0-SNAPSHOT.jar"]

2. 优化Spring Boot Maven插件配置

你的pom.xml中已经配置了spring-boot-maven-plugin,但可以补充一些关键配置确保打包正确:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <mainClass>com.example.Application</mainClass>
        <!-- 如果不需要特殊的启动器,可以去掉layout配置,默认JAR格式使用JarLauncher更稳定 -->
        <!-- <layout>ZIP</layout> -->
    </configuration>
    <!-- 强制执行repackage目标,确保生成可执行的Spring Boot JAR -->
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

加上executions配置可以确保Maven打包时自动执行Spring Boot的repackage操作,生成包含启动器的可执行JAR。

3. 验证构建后的JAR包内容

你可以在构建镜像后,临时检查JAR包是否包含目标类:

# 直接查看build阶段生成的JAR包内容
docker run --rm --entrypoint jar maven:3.6-jdk-11 tf /build/target/app-1.0-SNAPSHOT.jar

如果输出中能看到com/example/Application.class,说明JAR包的内容是正确的。

额外排查点

  • 确认本地的com.example.Application类确实存在于src/main/java/com/example/Application.java路径下,Linux容器区分大小写,路径和类名大小写要完全匹配。
  • 如果你使用了Lombok,检查Maven构建日志是否有Lombok相关的编译提示,确保注解被正确处理。

按照上面的步骤修改后,重新构建镜像并运行,应该就能解决ClassNotFoundException的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:27:35