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

构建Spring Boot Docker镜像时出现「找不到主类」错误该如何解决?

问题排查与解决方案

1. 确认JAR包类型是否正确

你当前复制的DWH_WebServices.jar大概率是普通编译JAR,而非Spring Boot的可执行Fat Jar。普通JAR仅包含项目类文件,缺少依赖和启动配置,会导致主类找不到。

  • 解决:通过Maven重新打包生成Fat Jar,执行命令:
    mvn clean package
    
    打包后的可执行JAR默认在target目录下,文件名格式一般为项目名-版本号.jar,替换Dockerfile中的COPY路径为该JAR的实际路径。

2. 检查Dockerfile的JAR路径准确性

确认out/artifacts/DWH_WebServices_jar/DWH_WebServices.jar这个路径在Docker构建上下文(执行build命令的目录)中真实存在。如果IntelliJ的构建输出路径和你预期不符,会导致COPY失败,镜像中没有正确的JAR文件。

  • 解决:
    1. 先在本地用java -jar 路径/DWH_WebServices.jar测试JAR能否正常启动,排除JAR本身问题。
    2. 修改Dockerfile的COPY路径为正确位置,比如Maven打包后的路径:
      COPY target/DWH_WebServices-1.0-SNAPSHOT.jar app.jar
      

3. 检查pom.xml的Spring Boot插件配置

确保pom.xml中包含正确的spring-boot-maven-plugin配置,该插件负责生成可执行Fat Jar:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- 若自动检测主类失败,手动指定 -->
                <mainClass>com.business.dwh_webservices.DwhWebServicesApplication</mainClass>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

4. 验证镜像内的JAR内容

可以临时启动容器检查JAR是否正确复制,以及主类是否存在:

# 启动临时容器进入shell
docker run -it --rm --entrypoint sh <你的镜像ID>
# 检查JAR内是否包含主类文件
jar tf /app.jar | grep com/business/dwh_webservices/DwhWebServicesApplication.class

如果无输出,说明JAR本身缺失主类,或COPY操作未正确复制文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:01:24