无法将IntelliJ配置为使用Java 11

无法将IntelliJ配置为使用Java 11,java,maven,intellij-idea,compiler-errors,intellij-14,Java,Maven,Intellij Idea,Compiler Errors,Intellij 14,尽管IntelliJ IDE没有给我任何警告,但这个两行方法会导致编译错误错误:(12,37)java:不兼容类型:byte[]无法转换为int: import java.math.BigInteger; public class Test { public static void main(String[] args){ String foo = "123"; new BigInteger(foo.getBytes(), 1, 1); } }

尽管IntelliJ IDE没有给我任何警告,但这个两行方法会导致编译错误
错误:(12,37)java:不兼容类型:byte[]无法转换为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 biginger(byte[]val,int off,int len)
(java.math.biginger的第306行),但在JDK 8中没有。我可以直接用
javac
为jdk11编译它,但在使用jdk8时正如预期的那样失败了。我已经将IntelliJ配置为使用JDK 11,但我不知道为什么它使用的是旧版本
System.out.println(System.getProperty(“java.version”)
prints
11.0.1
。看起来它是用JDK 8编译的,用JDK 11运行的

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

  • 运行/调试配置>JRE
  • 项目结构>项目>项目SDK
  • 项目结构>项目>项目语言级别
  • 项目结构>模块>语言级别
我正在使用IntelliJ IDEA 2018.2.6(社区版)。重新启动IntelliJ后问题仍然存在

编辑:


项目使用maven

类似问题的因素可能很少,主要由正在使用的其他工具(如maven或gradle)引起

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

构建工具(maven、gradle)可以设置为使用不同于IDE中配置的Java版本

要查看这些工具在终端中运行时使用的版本,请执行以下操作:

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>

maven编译器插件
1.11
1.11

在我的原始代码中,我有一个以64为基数编码的数字,我得到了相同的问题,我只是简化了问题。你的代码没有意义。如果要将字符串转换为BigInteger,请使用
新建BigInteger(字符串)
。看看javadoc:接受
byte[]
的构造函数应该是一个“包含BigInteger的二元补码二进制表示的字节子数组”,而不是字符串编码的字节数组。适用于JDK 11。