[英]org/testng/ITestListener has been compiled by a more recent version of the Java Runtime (class file version 55.0), only recognizes version up to 52
[英]UnsupportedClassVersionError: has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version (..)up to 52.0
我正在嘗試啟動我為 Spring Boot 項目構建的 jar 文件。 首先我做了:
mvn clean package spring-boot:repackage
然后我嘗試啟動 jar 文件,但出現以下錯誤:
線程“main”中的異常 java.lang.UnsupportedClassVersionError:it/sysdata/helios_backend_admin/HeliosAdminBackendApplication 已由較新版本的 Java 運行時(類文件版本 55.0)編譯,此版本的 Java 運行時僅識別類文件版本到 52.0 在 java.lang.ClassLoader.defineClass1(本機方法) 在 java.lang.ClassLoader.defineClass(未知來源) 在 java.security.SecureClassLoader.defineClass(未知來源) 在 java.net.URLClassLoader.defineClass(未知來源)在 java.net.URLClassLoader.access$100(未知來源) 在 java.net.URLClassLoader$1.run(未知來源) 在 java.net.URLClassLoader$1.run(未知來源) 在 java.security.AccessController.doPrivileged(本機方法) 在 java.net.URLClassLoader.findClass(Unknown Source) 在 java.lang.ClassLoader.loadClass(Unknown Source) 在 org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:93) 在 java.lang.ClassLoader org.s 中的 .loadClass(未知來源) org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46) 在 org.springframework.boot.loader.Launcher.launch(Launcher.java:87) 在 org.springframework.boot.loader.Launcher.launch(Launcher. java:50) 在 org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
我檢查過,Java 版本到處都是 11(至少從我看到的)。 這是 pom:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>it.sysdata</groupId>
<artifactId>helios_backend_admin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>helios-admin-backend</name>
<packaging>jar</packaging>
<description>Helios Backend for Dashboard admin</description>
<properties>
<java.version>11</java.version>
<flowable.version>6.4.1</flowable.version>
<swagger.version>2.9.2</swagger.version>
<jwt.version>0.9.1</jwt.version>
<cron4j.version>2.2.5</cron4j.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Flowable -->
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-process</artifactId>
<version>${flowable.version}</version>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-http</artifactId>
<version>${flowable.version}</version>
</dependency>
<!-- Swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<!-- JWT -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jwt.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.10.1</version>
</dependency>
<dependency>
<groupId>it.sauronsoftware.cron4j</groupId>
<artifactId>cron4j</artifactId>
<version>${cron4j.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
這些是我在 Project Properties -> Java Compiler -> JDK Compliance
下的設置:
然后在Window-> Preferences -> Installed JREs
中:
更新
真正的問題是,您之前通過一些升級版本的 JDK 構建了類,而不是您當前擁有的。
我也遇到了類似的問題,我在 Eclipse 中通過以下步驟解決了這個問題:
Project Properties (Alt + EnterKey) -> Java Build Path -> "Libraries" section ->
classpath -> select "JRE System Library" -> Edit -> Execution environment from "JRE System Library" window ->
Select the exact JDK version you currently have -> Apply -> Apply & Close.
您可以嘗試添加以下 maven 編譯器插件並檢查。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
運行 maven 並構建 jar 並嘗試運行。
我通過設置 JAVA_HOME 環境變量將其指向我機器上的 jdk12 目錄來修復。
我在命令行上運行mvn org.springframework.boot:spring-boot-maven-plugin:run
時遇到了類似的問題。 事實證明,插件版本已升級為不再支持我正在運行的 java 版本(java 11)的東西。 這是我看到的錯誤:
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.0.0-M1:run (default-cli) on project PROJECT_NAME: Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:3.0.0-M1:run failed: Unable to load the mojo 'run' in the plugin 'org.springframework.boot:spring-boot-maven-plugin:3.0.0-M1' due to an API incompatibility: org.codehaus.plexus.component.repository.exception.ComponentLookupException: org/springframework/boot/maven/RunMojo has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0
我可以通過在命令行mvn org.springframework.boot:spring-boot-maven-plugin:2.6.3:run
中指定版本來解決這個問題(注意:2.6.3 )
只需找到正確的 java JDK 並安裝它,在你的情況下(55.0 ~ JDK 11)這應該可以工作,至少對我來說。
在我的情況下,有一個錯誤的 JAVA_HOME 設置,
對我來說,執行了以下步驟:
這可能有助於 select 正確的 Java 版本:
將編譯器版本配置為 1.8(您需要的版本)后,嘗試使用舊版本的 spring boot,目前默認為 3.0.0,但您可以嘗試使用 2.7.6。
由於您沒有在 pom.xml 文件中指定插件版本,因此它將始終使用最新版本。 截至 2022 年 11 月 24 日為 3.0.0。它至少需要 Java 17。
因此,如果您的項目低於 Java 17,它將無法運行。
我的建議是請使用與您的 java 項目相同版本的插件。 並在 pom.xml 中指定它。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>your projects java version here.</version>
</plugin>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.