我在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()工作正常。
答案 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
目录。