Wie man set classpath wenn ich javax.tools.JavaCompiler Kompilierung der Quelle?
-
21-09-2019 - |
Frage
Ich verwende die Klasse javax.tools.JavaCompiler
(jdk6) eine Quelldatei zu kompilieren, aber die Quelldatei hängt von einigen JAR-Datei. Wie der Classpath des javax.tools.JavaCompiler
setzen?
Lösung
Die javax.tools.JavaCompiler # getTask () Methode nimmt einen options
Parameter, der Satz Compiler-Optionen erlaubt. Die folgende Nachricht eine einfache Möglichkeit, beschreibt sie den Zugriff zu setzen, um die Programm classpath Aufruf:
Sie müssen den Standard konfigurieren Java-Datei-Manager über das wissen JAR-Dateien (en) - verwenden Sie den Compiler Optionen dieses Argument zu tun.
Zahlungsverzuges durch das Java-Compiler Objekt nur scheint über den Standard wissen Standorte für bootclasspath, extdirs und endorseddirs Verzeichnisse in Bezug auf seinen Classpath.
Sie müssen die rufenden Programm hinzufügen aktuelle Classpath zum Java-Compiler Instanz, die auf dem übergeben wird die Standard-Dateimanager, die dann Klassen in den JAR-Dateien finden.
Hier ist, wie ich es in der Compiler Wrapper Ich schrieb
List<String> optionList = new ArrayList<String>(); // set compiler's classpath to be same as the runtime's optionList.addAll(Arrays.asList("-classpath",System.getProperty("java.class.path"))); // any other options you want optionList.addAll(Arrays.asList(options)); JavaCompiler.CompilationTask task = compiler.getTask(out,jfm,diagnostics,optionList,null,jfos);
Alle müssen Sie dann sind das richtige Classpath-Set zu erhalten, wenn das rufende Programm ausgeführt wird.
Andere Tipps
Das gleiche Problem kam ich vor kurzem, schließlich fand ich zwei Abhilfen. Sie können den Klassenpfad festgelegt entweder durch invoke StandardJavaFileManager.setLocation (StandardLocation.CLASS_PATH "YOUR_CLASS_PATH") oder Compiler.getTask (ARG_0, Arg_1, ARG_2, CLASS_PATH_OPTIONS, ebenso wie die erste Antwort sagt hier gepostet.