ToolProvider.getSystemJavaCompiler()在JDK 9中返回null

时间:2017-12-05 05:11:49

标签: java java-9 javacompiler

我在Eclipse中的项目正在运行 WITH SYSTEM JRE 9 。当我尝试将Java home设置为JDK 9以获取系统编译器时,我得到了null。

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk-9.0.1");
System.out.println(System.getProperty("java.home")); // print C:\Program Files\Java\jdk-9.0.1
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); // returns null

此代码以前适用于JDK 8(从JRE 8运行)

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.8.0_152");
System.out.println(System.getProperty("java.home")); // print C:\Program Files\Java\jdk1.8.0_152
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); // returns compiler

ToolProvider.getSystemJavaCompiler要求的工作原理是否有任何改变?

更新:不确定是否重要但如果我从JDK 9运行我的项目(不再需要更改为java.home)而不是JRE 9,则getSystemJavaCompiler()工作正常。

1 个答案:

答案 0 :(得分:1)

相应地将Unix上的路径改为/Contents/Home对我有用:

System.setProperty("java.home", 
                   "/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/");

虽然似乎根本不需要设置属性。由于以下代码行甚至可以独立执行:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

我的系统上的JAVA_HOME设置为指向JDK9 Home目录。