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

Docker部署SpringBoot/Kotlin项目出现Could not find or load main class错误如何解决

Docker部署SpringBoot/Kotlin项目报错“Error: Could not find or load main class ..app.jar”解决方案

1. 优先修复Dockerfile ENTRYPOINT语法错误

你提供的Dockerfile中ENTRYPOINT配置存在2处直接触发报错的问题:

  • 缺少java执行jar包必需的-jar参数
  • app.jar前多写了多余的.符号,导致java将.app.jar识别为主类名而非要执行的jar包
    将ENTRYPOINT替换为以下配置即可:
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

2. 验证Maven打包配置正确性

如果修改ENTRYPOINT后仍报错,需要确认pom.xml中配置了正确的打包插件,Kotlin + SpringBoot项目必须配置以下两类插件才能生成可执行jar包:

必须配置spring-boot-maven-plugin

插件会自动绑定SpringBoot启动类,将项目依赖打入jar包生成可执行文件,需要显式指定你的启动类全路径:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <mainClass>com.ob.stltool.StltoolApplication</mainClass>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

必须配置kotlin-maven-plugin

确保Kotlin代码正确编译,同时适配SpringBoot的类代理规则:

<plugin>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-maven-plugin</artifactId>
    <configuration>
        <args>
            <arg>-Xjsr305=strict</arg>
        </args>
        <compilerPlugins>
            <plugin>spring</plugin>
        </compilerPlugins>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-allopen</artifactId>
            <version>${kotlin.version}</version>
        </dependency>
    </dependencies>
</plugin>

3. 修正COPY阶段的jar包匹配规则

你当前使用的COPY --from=0 /target/*-jar-with-dependencies.jar app.jar规则,仅匹配maven-assembly-plugin生成的带依赖jar包,如果你用的是SpringBoot官方打包插件,生成的jar包不会带有jar-with-dependencies后缀,会导致COPY失败、镜像内根本不存在app.jar文件。
可以先临时将ENTRYPOINT改为["ls","-lh","/root/"]构建运行镜像,确认目录下是否存在正常大小的app.jar,如果不存在可以修改COPY规则为:

# 匹配所有jar包,排除SpringBoot打包生成的original前缀源码包
COPY --from=0 /target/*[^original].jar app.jar

4. 本地验证jar包可用性

本地执行mvn package后,手动执行java -jar target/生成的jar包名.jar,如果本地启动也报找不到主类,说明是项目打包配置问题,和Docker无关,先解决本地打包问题再进行镜像构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:30:01