错误:类文件具有错误的版本 55.0, 应为 53.0

一、复现

  1. 错误现场
    在idea内部终端执行gradle构建命令

    1
    ./gradlew build installDist

    Task :demo:compileJava FAILED
    /xxx/xxx/xxx/App.java:6: 错误: 无法访问Array
    import java.lang.reflect.Array;

                     ^
    

    错误的类文件: /modules/java.base/java/lang/reflect/Array.class
    类文件具有错误的版本 55.0, 应为 53.0
    请删除该文件或确保该文件位于正确的类路径子目录中。
    1 个错误

  2. JAVA环境
    本机安装有1.8和11两个JDK版本

二、定位

  1. 查看项目内gradlew命令文件,69行代码开始设置java相关命令,是从$JAVA_HOME目录下获取。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # Determine the Java command to use to start the JVM.
    if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
    # IBM's JDK on AIX uses strange locations for the executables
    JAVACMD="$JAVA_HOME/jre/sh/java"
    else
    JAVACMD="$JAVA_HOME/bin/java"
    fi
    if [ ! -x "$JAVACMD" ] ; then
    die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

    Please set the JAVA_HOME variable in your environment to match the
    location of your Java installation."
    fi
  2. 查看$JAVA_HOME变量
    1
    echo $JAVA_HOME
    问题来了,居然没有打印任何结果
  3. 查看环境变量配置
    1
    vim ~/.bash_profile
    1
    2
    3
    4
    5
    6
    JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home"
    CLASS_HOME="$JAVA_HOME/lib"
    PATH=".;$PATH:$JAVA_HOME/bin"
    export JAVA_HOME
    export CLASSPATH
    export PATH
    本地环境变量已经配置了,但是$JAVA_HOME没有生效
  4. 尝试加载
    1
    source ~/.bash_profile
  5. 重新运行
    1
    ./gradlew build installDist
    可以正常运行

    三、问题

    gradle不能正常打包,是因本地JAVA_HOME配置没有生效。使用了系统默认的JDK 11进行构建,项目需要的是低版本JDK8。

    四、解决

    1
    vim ~/.zshrc
    添加一行
    1
    source ~/.bash_profile
Author: suce
Link: https://haoubox.cn/2021/04/20/错误-类文件具有错误的版本-55-0-应为-53-0/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.