当前位置: 首页 > 知识库问答 >
问题:

Docker run返回一个异常:应用程序已由最新版本的Java运行时编译

宋育
2023-03-14

我使用Springboot创建了一个web应用程序,现在我要对其进行dockerize并将其上传到docker Hub中。所以我的DockerFile是,

FROM openjdk:8

EXPOSE 8080

ADD target/spring-boot-web-0.0.1-SNAPSHOT.jar spring-boot-web-0.0.1-SNAPSHOT.jar

ENTRYPOINT ["java","-jar","spring-boot-web-0.0.1-SNAPSHOT.jar"]
docker build -t kubernatesimage
docker run -it  -p 4000:80 kubernatesimage 

线程“main”Java.lang.UnsupportedClassVersionError中的异常:Guru/SpringFramework/SpringBootWebApplication已由最新版本的Java运行时(类文件版本55.0)编译,此版本的Java运行时仅识别52.0以下的类文件版本

根据@Nithin在这个StackOverflow问题中的回答,我发现这是由于版本不匹配和java版本代码造成的,

49 = Java 5
50 = Java 6
51 = Java 7
52 = Java 8
53 = Java 9
54 = Java 10
55 = Java 11
56 = Java 12
57 = Java 13
58 = Java 14

但是,我仍然不知道我需要执行什么来解决这个问题。我在DockerFile中提到了OpenJDK:8,我运行java-version以获取本地JDK版本,它返回

java version "1.8.0_271"

那么我需要更改本地机器中的java版本还是更改我的DockerFile

共有1个答案

闻人博
2023-03-14

由于此Docker run-it-p 4000:80kubernatesimage,您的应用程序不应该以任何方式运行,它应该是Docker run-it-p 4000:8080kubernatesimage

关于这个问题:您的运行时版本是8:因为您的dockerfile是“from openjdk:8”,所以您的应用程序将运行在Java8Environment=>Version52中。并且您已经通过另一个版本55(java 11)将应用程序编译为jar文件“spring-boot-web-0.0.1-snapshot.jar”。所以您有java version mismatch=>关键是确保编译时和运行时都使用相同的JDK。

一个建议的修复方法是在pom.xml文件中更改java版本

<project>
...
 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
...
</project>
FROM adoptopenjdk/openjdk11:alpine-jre
ARG JAR_FILE=target/*.jar
WORKDIR /opt/app
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]

注意:您仍然可以在较大的运行时环境中运行较小的编译java版本,即在Java11运行时环境中运行编译的8 java版本

我希望我帮了你

 类似资料:
  • 我用Intellij来解决这个问题。但我有最新版本的所有新安装在我的系统。 ...已由最新版本的Java运行时(类文件版本57.0)编译,此版本的Java运行时仅识别52.0以下的类文件版本 我已经设定: 完整的错误消息:

  • 我用Intellij来解决这个问题。但我有最新版本的所有新安装在我的系统。 ...已由最新版本的Java运行时(类文件版本57.0)编译,此版本的Java运行时仅识别52.0以下的类文件版本 我已经设定了路径,试图在项目结构中找到一个变化 完整的错误消息:

  • 当我使用搜索功能时,我得到一个http Status500错误。它声称 错误报告 搜索servlet代码 结果jsp

  • 我试图为我的spring boot应用程序启动jar文件,但我不断收到错误消息,它是由最新版本的Java Runtime(类文件版本61.0)编译的,这个版本的Java Runtime只能识别高达52.0的类文件版本。我觉得我已经尝试了所有我认为我正在使用的最新版本的Java。有什么我能做的吗?如果有什么可以下载的,请链接一下好吗?

  • 问题内容: 使用搜索功能时,出现http状态500错误。它声称 错误报告 HTTP状态500 –内部服务器错误 类型异常报告 消息SearchServlet已由Java Runtime的较新版本(类文件版本53.0)进行编译,此版本的Java Runtime仅可识别52.0以下的类文件版本(无法加载类[SearchServlet]) 描述服务器遇到意外情况,阻止其满足请求。 异常java.lang

  • 我正在尝试启动我为Spring Boot项目构建的jar文件。首先我做了: 然后,我尝试启动jar文件,但出现以下错误: 线程“main”Java.lang.UnsupportedClassVersionError中出现异常:IT/sysdata/Helios_BackEnd_Admin/HeliosAdminBackEndApplication已由较新版本的Java运行时(类文件版本55.0)编