构建Docker镜像遇版本错误:class文件版本65.0不符合62.0要求
问题分析与解决方案
核心问题
你遇到的class文件版本65.0,应为62.0错误,本质是Java版本不兼容:
- 本地用Java 21(对应class文件版本65)编译了代码
- Docker里的
openjdk基础镜像默认拉取的是Java 17(对应class版本62),低版本JVM无法运行高版本编译的class文件
修复步骤
1. 指定Java 21的基础镜像
修改Dockerfile的第一行,明确使用Java 21的镜像:
# 推荐使用eclipse-temurin镜像,维护更稳定 FROM eclipse-temurin:21-jdk COPY . /app/ WORKDIR /app RUN javac Main.java # 注意:Java类名区分大小写,主类是Main不是main CMD ["java", "Main"]
如果坚持用官方openjdk镜像,也可以写FROM openjdk:21
2. 修正类名大小写问题
你的CMD指令里写的是java main,但Java类名严格区分大小写,你的主类是Main,必须改成java Main,否则会报找不到主类的错误。
3. 进阶优化(可选)
用多阶段构建减小镜像体积,编译阶段用JDK,运行阶段用更轻量化的JRE:
# 第一阶段:编译代码 FROM eclipse-temurin:21-jdk AS builder COPY . /app/ WORKDIR /app RUN javac Main.java # 第二阶段:运行代码 FROM eclipse-temurin:21-jre COPY --from=builder /app/*.class /app/ WORKDIR /app CMD ["java", "Main"]
内容的提问来源于stack exchange,提问作者Lirzhan
相关产品推荐
相关产品推荐

