无法将IntelliJ配置为使用Java 11

时间:2019-12-17 22:34:02

标签: java maven intellij-idea compiler-errors intellij-14

尽管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编译JDK 11,但是它与预期的JDK 8一起失败。我已经将IntelliJ配置为使用JDK 11,但是我不知道为什么它使用的是旧版本... System.out.println(System.getProperty("java.version"))打印11.0.1。好像它是用JDK 8编译并用JDK 11运行。

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

  • 运行/调试配置> JRE
  • 项目结构>项目> Project SDK
  • 项目结构>项目>项目语言级别
  • 项目结构>模块>语言级别

我正在使用IntelliJ IDEA 2018.2.6 (Community Edition)。重新启动IntelliJ后问题仍然存在。

编辑:

项目使用Maven

1 个答案:

答案 0 :(得分:2)

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

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

可以将构建工具(maven,gradle)设置为使用与在IDE中配置的Java不同的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>