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
相关产品推荐
相关产品推荐

