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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top