2013-03-20 3 views
22

Ich versuche, die JavaCompiler Klasse zu verwenden:ToolProvider.getSystemJavaCompiler() gibt null zurück - verwendbar nur mit JRE installiert?

Als ich ToolProvider.getSystemJavaCompiler() nennen es null zurückgibt.

Ich denke, das ist, weil ich eine JRE anstelle eines JDK verwende.

Das Problem ist, dass ich möchte, dass es auf allen Plattformen läuft, unabhängig davon, ob der Benutzer eine JRE oder ein JDK verwendet.

Wenn jemand weiß, wie das zu beheben ist, oder eine alternative Methode zu verwenden, bitte Kommentar.

Jede Hilfe wäre willkommen.

+2

Sie benötigen wahrscheinlich das JDK, um _development_ tools wie einen Compiler zu verwenden ... nur eine Vermutung. – jahroy

+3

Vorsicht bei Titeln. Diese Frage hat nichts mit "Java Compiler funktioniert nicht". –

+1

Ich denke du solltest die Frage von @nneonneo anfragen. Es besteht eine gute Chance, dass er (oder jemand anderes) einen anderen Ansatz vorschlagen könnte (wenn sie wissen, was Sie tun möchten). Ansonsten können wir Ihnen nur sagen, dass Ihr aktueller Ansatz ** nicht ** funktionieren wird. – jahroy

Antwort

4

Ich denke, das ist die problem. Explizit Angabe der Version von java.exe, die Sie als die in Ihrem JDK-Verzeichnis verwenden.

see here für Details

+0

Von diesem Link: "_Bases auf den SDN Kommentare, ich stimme zu, das Problem reproduziert werden kann, wenn das angegebene Testprogramm mit JRE statt JDK ausgeführt wird. Angenommen, dass dies das Problem der Übergeber ist, bin ich ändern den Close-Substatus von "Nicht reproduzierbar" bis "Kein Fehler" _ " – jahroy

+1

Das OP hat angegeben, dass er ** nicht ** ein JDK verwendet, sondern eine JRE. Der von Ihnen angegebene Link gibt an, dass "null" der erwartete Rückgabewert bei Verwendung einer JRE ist. Daher wurde der Fehler als "_not a defect_" markiert. – jahroy

+0

gut in diesem Fall ist ihre sowieso eine Datei auf einem jre kompilieren –

9

ToolProvider.getSystemJavaCompiler() ist nicht verfügbar.

Ist tools.jar im Klassenpfad nicht vorhanden?

Set class path to the tools.jar Datei, die in jdk \ jre Verzeichnis gefunden werden kann.

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");

+0

@ PSR- eigentlich ich nicht explizit die Version von java.exe angeben, ich zeige nur den Pfad von JDK ... Und so wird es definitiv funktionieren. –

4

Hier ist, wie die Java-Compiler von Ihrer Anwendung auszuführen, wenn kein JDK installiert.

Fügen Sie zuerst die Datei tools.jar von einem JDK mit Ihrer Java-App ein und fügen Sie tools.jar in Ihren Klassenpfad ein. Oracle wird es wahrscheinlich nicht mögen, dass du das tust. Aber es gibt legale Umgehung. Sie erhalten die Datei tools.jar von den freien JDKs, die von openjdk.org (openjdk), RedHat (IcedTea) oder Azul Systems (Zulu) angeboten werden.

Als Nächstes rufen Sie anstelle von ToolProvider.getSystemJavaCompiler() und der JavaCompiler-Klasse den Compiler in tools.jar direkt auf. Im Folgenden finden Sie Code-Snippet:

String classpath = ...; // make sure tools.jar is in this path 
String sourcepath = ...; // path to your sources 
String putputpath = ...; // directory for generated class files 
String filepath = ...; // file path the file you want to compile 

String[] args = new String[] { 
"-classpath", classpath, 
"-sourcepath", sourcepath, 
"-d", putputpath, 
filePath 
}; 
com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main(); 
int compileStatus = javac.compile(args); 
0

hier ist einfache Lösung, die für mich gearbeitet

Ich habe gerade die jre Systembibliothek zu ..... Program Files \ Java \ jdk1.7.0_55 \ jre anstelle von .... Programmdateien \ Java \ jdk1.7.0_55 \ bin und es funktionierte für mich.

1

Kopieren Sie einfach Werkzeuge.JAR-Datei aus/lib zu Es funktioniert

Sie von System.out.println erhalten können (System.getProperty ("java.home"))

meisten Zeit wie C: \ Program Files \ Java \ jre (Version) [für Windows]