Spring Boot Docker镜像构建成功 运行时提示app.jar无主清单属性
报错原因及解决方案
问题1:MaxRAMFraction废弃警告
原因
你使用的是JDK 11,-XX:MaxRAMFraction参数从JDK 10版本开始就已被标记为废弃,后续版本会正式移除,因此JVM启动时会抛出该警告。
解决方法
替换为JDK 10+官方推荐的-XX:MaxRAMPercentage参数即可,原配置-XX:MaxRAMFraction=1等价于-XX:MaxRAMPercentage=100.0,注意该参数值需要使用小数格式。
问题2:no main manifest attribute, in app.jar
原因
虽然你已经添加了spring-boot-maven-plugin依赖,但插件未正确执行repackage目标,构建出的jar包是普通Java jar而非Spring Boot可执行jar,jar包内META-INF/MANIFEST.MF文件中没有指定入口主类的Main-Class属性,因此java -jar命令启动时无法找到程序入口。
解决方法
- 检查pom.xml中spring-boot-maven-plugin的配置,确保已绑定
repackage执行目标,正确配置参考如下:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <!-- 如有自定义启动类可添加下方configuration配置,无特殊需求可省略 --> <configuration> <mainClass>com.yourpackage.YourApplicationMainClass</mainClass> </configuration> </plugin> </plugins> </build>
- 确认执行的打包命令正确,需要执行
mvn clean package完成全量构建,不要仅执行mvn jar:jar,后者只会生成普通jar包,不会触发Spring Boot的repackage流程。 - 打包完成后可先在本地验证jar包可用性,执行
java -jar target/你的jar包名称.jar,确认可以正常启动后再进行Docker镜像构建。 - 检查target目录下的jar文件,Spring Boot打包后会生成两个jar包:后缀为
.jar的是可执行jar,后缀为.jar.original的是普通jar,确保镜像构建时ADD指令匹配到的是可执行jar文件。
修改后的Dockerfile参考
FROM registry.gitlab.com/client/micro/micro-services/baseimage/database-baseimage/tmo-main:database-baseimage-1.0.1f28a87b ADD ./target/*.jar app.jar ENV TZ=America/Los_Angeles ENTRYPOINT ["java","-XX:+UnlockExperimentalVMOptions","-XX:+UseContainerSupport","-XX:MaxRAMPercentage=100.0","-XX:+UseG1GC","-jar","app.jar"] EXPOSE 8080
内容的提问来源于stack exchange,提问作者Abhiram S
相关产品推荐
相关产品推荐

