无法配置 IntelliJ 以使用 Java 11

Unable to configure IntelliJ to use Java 11

虽然 IntelliJ IDE 没有给我任何警告,但是这种两行的方法会导致编译错误 Error:(12, 37) java: incompatible types: byte[] cannot be converted to int:

import java.math.BigInteger;

public class Test {

    public static void main(String[] args){
        String foo = "123";
        new BigInteger(foo.getBytes(), 1, 1);
    }
}

在 JDK 11 中有一个具有此签名的有效构造函数 public BigInteger(byte[] val, int off, int len)(java.math.BigInteger 的第 306 行)但在 JDK 8 中没有。我能够编译它直接用 javac for JDK 11 但它失败了 JDK 8 正如预期的那样。我已将 IntelliJ 配置为使用 JDK 11,但我不知道为什么它使用旧版本...System.out.println(System.getProperty("java.version")) 打印 11.0.1。好像是用 JDK 8 编译,运行 用 JDK 11 编译。

我已经检查我在以下位置选择了 JDK 11:

我正在使用 IntelliJ IDEA 2018.2.6 (Community Edition)。重启 IntelliJ 后问题依旧。

编辑:

项目使用maven

类似问题的因素可能很少,主要是使用了其他工具(例如maven或gradle)造成的。

仅使用 IDE 编译和 运行 代码应该没有问题(因为使用的 Java 版本已完全配置)。

可以将构建工具(maven,gradle)设置为使用 Java 的不同版本,然后使用 IDE 中配置的版本。

要在终端中查看这些工具 运行 使用的版本:

gradle -version
mvn -version

输出应包含使用这些工具配置的 Java 版本。
他们的 Java 版本主要使用 JAVA_HOME 环境变量,它指向 JRE/JDK 位置。

如果构建工具使用不同的 Java 版本来编译源代码,那么启动应用程序的版本可能会导致此类错误和异常。
这些问题与 Java8 和更新版本之间标准 API 的变化有关。

JAVA_HOME 变量的值更改为指向 Java11 文件夹应该可以完成工作,但是如果仍然需要旧版本,例如在使用 Maven 时,可以使用插件:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.11</source>
        <target>1.11</target>
    </configuration>
</plugin>