3

我在 Eclipse 中的项目正在运行WITH SYSTEM JRE 9。当我尝试将 Java 主页设置为 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() 工作正常。

4

1 回答 1

1

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

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

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

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

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

于 2017-12-05T05:22:58.907 回答