2017-12-05 3 views
3

Mein Projekt in Eclipse läuft MIT SYSTEM JRE 9. Wenn ich versuche, Java auf JDK 9 zu setzen, um den Systemcompiler zu bekommen, bin ich null geworden.ToolProvider.getSystemJavaCompiler() gibt null in JDK 9 zurück

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 

Dieser Code vorher einwandfrei funktioniert mit JDK 8 (läuft von 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 

Gab es eine Änderung, wie ToolProvider.getSystemJavaCompiler Anforderung funktioniert?

Update: nicht sicher, ob es darauf ankommt, aber getSystemJavaCompiler() funktioniert gut, wenn ich mein Projekt von JDK 9 laufen (Änderung java.home ist nicht mehr erforderlich), im Gegensatz zu JRE 9.

+0

Natürlich mit JRE allein würde es nicht funktionieren. Ich habe gesagt, dass dies funktioniert, wenn ich mit JRE 8 starte und das Verzeichnis 'java.home' in JDK8 ändere. Was ich nicht verstehe ist, dass dies für JRE9 - JDK9-Paar funktioniert nicht mehr funktioniert. – vda8888

+0

@ vda8888 mit JRE9 macht den Pfad zu '... jdk-9.0.1.jdk \\ Contents \\ Home' Arbeit für Sie? – nullpointer

+2

Es wurde nie angegeben, dass die Systemeigenschaft 'java.home' für diese Funktion relevant ist. Sie haben also ein Implementierungsdetail früherer Java-Versionen verwendet, das geändert wurde. Der Zweck der ToolProvider-API besteht darin, keine Implementierungsdetails mehr für den Zugriff auf den Compiler zu verwenden. Und warum tust du das? Warum führen Sie Ihre Anwendung nicht einfach mit diesem jdk aus, indem Sie einfach jdk in der Startkonfiguration von Eclipse angeben? – Holger

Antwort

2

Entsprechend den Pfad zu ändern auf Unix zu /Contents/Home funktioniert bei mir:

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

Obwohl es scheint nicht überhaupt eine Notwendigkeit der Einstellung der Eigenschaft zu sein. Da die folgenden Codezeile führt auch unabhängig fein auch:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

mit JAVA_HOME auf meinem System zu JDK9 Home Verzeichnis verweisen gesetzt.

+1

Hinweis, der OP läuft seinen Code von JRE9, nicht JDK9 – ZhekaKozlov

+0

@ZhekaKozlov Ya ein wenig verwirrend Ich denke, da der Code liest 'C: \\ Programme \\ Java \\ jdk-9.0.1' – nullpointer