this version of the Java Runtime only recognizes class file versions up to 52.0

简介: this version of the Java Runtime only recognizes class file versions up to 52.0

在 SAP Commerce Cloud Backoffice 做 full indexing 时,遇到错误消息:

ERROR: Error from server at https://localhost:8983/solr: Error CREATEing SolrCore ‘master_backoffice_backoffice_product_flip’: Unable to create core [master_backoffice_backoffice_product_flip] Caused by: de/hybris/platform/solr/search/MultiMaxScoreQParserPlugin has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
25.05.2023 11:57:49: ERROR: Executing indexer worker as an admin user failed:


有人说是本地 jdk 版本的问题,但我装的确实是 jdk 17:


https://answers.sap.com/questions/13784006/dehybrisplatformsolrsearchmultimaxscoreqparserplug.html


最后发现原因是我把 sap machine 下载到本地后,只是将其 bin 文件目录指定到了 path 环境变量下面:

image.png


正规的操作流程:


Add the System variable JAVA_HOME and set it to the root directory of the extracted archive (e.g. C:<…>\sapmachine-jdk-11.0.3)


Edit the System variable PATH and add %JAVA_HOME%\bin to the PATHvariable


“java class file version 55.0” 是指Java编译器生成的Java类文件的版本号。每个Java类文件都有一个与之关联的版本号,用于指示该类文件是使用哪个Java编译器版本编译的。


Java类文件版本号采用了一种命名约定,它由两个数字组成,分别表示主版本号和次版本号。例如,“55.0” 表示主版本号为55,次版本号为0。在Java中,主版本号通常与Java编译器的版本号相关联。


下面我将详细解释"java class file version 55.0" 的含义以及与Java编译器版本的关系。


版本号的结构和含义:

Java类文件版本号由两个数字组成,如 “55.0”。这两个数字的含义如下:

主版本号:主版本号表示Java编译器的版本。较高的主版本号通常意味着使用了更新的Java编译器和语言特性。主版本号的变化通常伴随着Java平台的重大改进和新功能的引入。


次版本号:次版本号表示Java类文件的格式版本。次版本号的变化通常表示类文件格式的微小改变,如修复了一些错误或进行了一些优化。


版本号的命名约定遵循一定的规则。主版本号通常是向后兼容的,也就是说,较新版本的Java编译器可以编译较旧版本的Java类文件。然而,较旧版本的Java编译器可能无法编译较新版本的Java类文件。


Java编译器和版本对应关系:

Java类文件版本号与Java编译器版本存在一定的对应关系。不同的Java编译器版本会生成不同版本的类文件。

Java SE 1.1:版本号 45.0

Java SE 1.2:版本号 46.0

Java SE 1.3:版本号 47.0

Java SE 1.4:版本号 48.0

Java SE 5:版本号 49.0

Java SE 6:版本号 50.0

Java SE 7:版本号 51.0

Java SE 8:版本号 52.0

Java SE 9:版本号 53.0

Java SE 10:版本号 54.0

Java SE 11:版本号 55.0

Java SE 12:版本号 56.0

Java SE 13:版本号 57.0

Java SE 14:版本号 58.0

Java SE 15:版本号 59.0

Java SE 16:版本号 60.0

Java SE 17:版本号 61.0

可以看到,每个Java编译器版本都与一个特定的类文件版本号相关联。因此,当使用特定版本的Java编译器编译Java源代码时,生成的


类文件将带有与该编译器版本相对应的版本号。


版本号的重要性:

类文件版本号的重要性在于确保兼容性和正确的运行环境。较新版本的Java编译器通常支持更多的语言特性和功能,因此使用较新版本的编译器可以更好地利用Java语言的新功能。

另一方面,确保类文件与运行环境兼容也很重要。如果将使用较新版本编译的类文件部署到较旧版本的Java运行环境中,可能会出现不兼容的情况。因此,在选择Java编译器版本时,需要考虑目标运行环境的兼容性。


总结:

“java class file version 55.0” 表示Java类文件的版本号,其中主版本号为55,次版本号为0。该版本号与Java编译器的版本相关联,用于指示类文件是使用哪个版本的Java编译器生成的。不同的Java编译器版本会生成不同版本的类文件,因此在选择Java编译器版本时需要考虑兼容性和所需的语言特性。了解类文件版本号的含义和与编译器版本的对应关系可以帮助开发人员正确选择和管理Java代码和运行环境。

相关文章
|
27天前
|
Java 开发工具 流计算
flink最新master代码编译出现Java Runtime Environment 问题
在尝试编译Flink源码时遇到Java运行时环境致命错误:EXCEPTION_ACCESS_VIOLATION。问题出现在JVM.dll+0x88212。使用的是Java 11.0.28和Java HotSpot(TM) 64-Bit Server VM。系统为Windows客户端,没有生成核心dump文件。错误日志保存在hs_err_pid39364.log和replay_pid39364.log。要解决这个问题,建议检查JDK版本兼容性,更新JDK或参照错误报告文件提交Bug至http://bugreport.java.com/bugreport/crash.jsp。
|
4月前
|
安全 Java
Java反射-Class对象功能概述及反射案例
Java反射-Class对象功能概述及反射案例
40 1
|
7月前
|
Java API
Java之API详解之Runtime的详细解析
Java之API详解之Runtime的详细解析
95 0
Java之API详解之Runtime的详细解析
|
2月前
|
Dubbo Java 应用服务中间件
Serialized class org.apache.catalina.core.ApplicationPart must implement java.io.Serializable
Serialized class org.apache.catalina.core.ApplicationPart must implement java.io.Serializable
49 0
|
1月前
|
Java 关系型数据库 MySQL
Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
【2月更文挑战第33天】Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
55 2
|
1月前
|
Java
916.【Java】javap 查看 class 文件的jdk编译版本
916.【Java】javap 查看 class 文件的jdk编译版本
52 2
|
5月前
|
Java
JAVA 抽象类(Abstract Class) 和 接口(Interface) 的区别
对于面向对象编程来说,抽象是它的一大特征之一。在 Java 中,可以通过两种形式来体现 OOP 的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。今天我们就一起来学习一下Java中的接口和抽象类抽象类不能用于实例化对象,抽象类往往用来表示抽象概念。举个例子,中国人(Chinese 类)和美国人(American 类)都有“吃饭”这个行为,因此可以先定义一个 Person 类,然后让 Chinese 和 American 都继承这个类。但如何在父类 Person 中定义“吃饭”这个方法呢?一般
74 0
|
6月前
|
Java
【异常解决】Java运行时发生 java.lang.NoClassDefFoundError: Could not initialize class com.iot.alarm.ProcAlar
【异常解决】Java运行时发生 java.lang.NoClassDefFoundError: Could not initialize class com.iot.alarm.ProcAlar
119 0
|
3月前
|
Java
java使用Class类的getResource方法读取文件遇到的问题和解决方案
java使用Class类的getResource方法读取文件遇到的问题和解决方案
|
4月前
|
Java
在Java中,类(Class)
在Java中,类(Class)
30 5