从 javac 或 JRE 获取没有编译类的 java 类版本

Lui*_*ñoz 1 java javac unsupported-class-version

Java 类版本可以使用以下命令从类二进制文件中获取javap

javap -verbose Test | grep 'minor\|major'
  minor version: 0
  major version: 55
Run Code Online (Sandbox Code Playgroud)

是否可以提前知道 JDK 将生成哪个类版本? java -version不显示它

java -version
openjdk version "11.0.17" 2022-10-18
Run Code Online (Sandbox Code Playgroud)

通常与java.lang.UnsupportedClassVersionError相关。

Lui*_*ñoz 9

JDK 生成的 Java 类主/次版本可以从java,javacjavap如下命令获取

java -XshowSettings:properties -version 2>&1 | grep -E -e 'java\.(class\.)?version '
javac -J-XshowSettings:properties -version 2>&1 | grep -E -e 'java\.(class\.)?version '

# testing all 3 commands
for cmd in "java " "javac -J" "javap -J"; do echo "${cmd% *}"; ${cmd}-XshowSettings:properties -version 2>&1  | grep -E -e 'java\.(class\.)?version ' ; done
Run Code Online (Sandbox Code Playgroud)

结果:

java 
    java.class.version = 61.0
    java.version = 17.0.8.1
javac
    java.class.version = 55.0
    java.version = 11.0.20.1
javap
    java.class.version = 55.0
    java.version = 11.0.20.1
Run Code Online (Sandbox Code Playgroud)

注意:就像我的情况一样:p,Linux 错误配置可能会给出不同的结果java,并javac显示这两个命令属于不同的版本。通常可以使用alternatives命令来修复。