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

发布时间 2023-06-19 21:39:17作者: JerryWang_汪子熙

在 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 环境变量下面:

正规的操作流程:

  1. 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)

  2. 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编译器版本的关系。

  1. 版本号的结构和含义:
    Java类文件版本号由两个数字组成,如 "55.0"。这两个数字的含义如下:
  • 主版本号:主版本号表示Java编译器的版本。较高的主版本号通常意味着使用了更新的Java编译器和语言特性。主版本号的变化通常伴随着Java平台的重大改进和新功能的引入。

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

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

  1. 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源代码时,生成的

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

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

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

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