如何修复加载主类错误时发生的 LinkageError?使用其他 JDK 运行时?

Mar*_*rtl 5 java build intellij-idea environment-variables gradle

我想在 IntelliJ 中启动 Java ChatServer(Gradle JVM 设置为 Java 16.0.1 应该是!)。运行该类后,我收到以下错误:

Error: LinkageError occurred while loading main class edu.hm.cs.vt.chat.server.ChatServerStarter
        java.lang.UnsupportedClassVersionError: edu/hm/cs/vt/chat/server/ChatServerStarter has been compiled by a more recent version of the Java Runtime (class file version 60.0), this version of the Java Runtime only recognizes class file versions up to 55.0
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Execution failed for task ':chat:server:ChatServerStarter.main()'. Process 'command '/Users/username/opt/anaconda3/bin/java'' finished with non-zero exit value 1
Run Code Online (Sandbox Code Playgroud)

我的本地配置设置如下:

Java版本:

java -version
openjdk version "11.0.6" 2020-01-14

which java
/Users/username/opt/anaconda3/bin/java
Run Code Online (Sandbox Code Playgroud)

看来我的Java版本是从conda使用的。

机器上安装的 Java 版本:

/usr/libexec/java_home -V
Matching Java Virtual Machines (2):
16.0.1 (x86_64) "Oracle Corporation" - "OpenJDK 16.0.1" /Library/Java/JavaVirtualMachines/jdk-16.0.1.jdk/Contents/Home
1.8.241.07 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/Library/Java/JavaVirtualMachines/jdk-16.0.1.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)

JAVA_HOME路径:

echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-16.0.1.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)

为什么

'/Users/username/opt/anaconda3/bin/java'
Run Code Online (Sandbox Code Playgroud)

出现在错误消息中?

我如何配置它以使用 16.0.1 JDK 或者我做错了什么?

Geo*_*rge 1

有3种方法可以做到这一点,

首先是 gradle.properties 你需要添加

org.gradle.java.home=/path/to/jdk/directory
Run Code Online (Sandbox Code Playgroud)

第二种方法是使用这样的终端进行一次测试

gradle build -Dorg.gradle.java.home=/JDK_PATH
Run Code Online (Sandbox Code Playgroud)

第三种方法可以添加 build.gradle 的路径

 compileJava.options.fork = true
 compileJava.options.forkOptions.executable = '/path_to_javac'
Run Code Online (Sandbox Code Playgroud)