2017-12-05 1 views
3

EclipseのプロジェクトでWITH SYSTEM JRE 9が実行されています。 JDK 9にJavaのホームを設定しようとすると、システムコンパイラを取得するときにnullが返されます。JDK 9でToolProvider.getSystemJavaCompiler()が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で正常に動作します

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要件がどのように機能するかに何らかの変更があった(JRE 8から実行していますか)?

更新:それは重要しかし、私はJDK 9からの私のプロジェクトを実行する場合getSystemJavaCompiler()が正常に動作かどうかわからない(のjava.homeへの変更が不要になった)JRE 9とは対照的に、

+0

もちろんJREだけではうまくいきません。私はこれがJRE 8で起動し、 'java.home'をJDK 8ディレクトリに変更すると動作すると言いました。 私が理解できないことは、これがJRE9 - JDK9のペアで動作しなくなることです。 – vda8888

+0

@ vda8888 with JRE9は '... jdk-9.0.1.jdk \\ Contents \\ Home'へのパスをあなたのために設定していますか? – nullpointer

+2

システムプロパティー 'java.home'がこの機能と関連があることは決してありませんでした。したがって、変更された以前のJavaバージョンの実装の詳細を使用していました。 'ToolProvider' APIの全目的は、コンパイラにアクセスするための実装の詳細の使用を止めることです。そして、なぜあなたはこれをやっていますか? EclipseのLaunch Configurationでjdkを指定するだけで、そのjdkでアプリケーションを実行するのはなぜですか? – Holger

答えて

2

それに対応してパスを変更します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ディレクトリを指すように設定します。

+1

注:OPは彼のコードをJDK9ではなくJRE9から実行しています。 – ZhekaKozlov

+0

@ ZhekaKozlovええ、コードが 'C:\\ Program Files \\ Java \\ jdk-9.0.1' – nullpointer

関連する問題