Come impostare classpath quando uso javax.tools.JavaCompiler compilare la fonte?
-
21-09-2019 - |
Domanda
Io uso il javax.tools.JavaCompiler
classe (JDK6) per compilare un file sorgente, ma il file di origine dipende da alcuni file jar. Come impostare il classpath del javax.tools.JavaCompiler
?
Soluzione
Il javax.tools.JavaCompiler # getTask () metodo prende un parametro options
che permette di impostare le opzioni di compilazione. Il messaggio href="http://forums.sun.com/thread.jspa?messageID=10377161#10377161" rel="noreferrer"> seguente descrive un modo semplice per impostare loro al fine di accedere al classpath chiamando del programma:
È necessario configurare lo standard file manager java da sapere sul file jar (s) - si utilizza il compilatore opzioni argomento di farlo.
Per impostazione predefinita l'oggetto Java compiler sembra solo di conoscere il default posizioni per bootclasspath, extdirs e endorseddirs directory in termini del suo classpath.
È necessario aggiungere il programma del chiamante classpath corrente al compilatore java esempio di che viene trasmesso alla il gestore di file standard, che sarà poi trovare le classi nei file jar.
Ecco come lo faccio in il compilatore Wrapper Ho scritto
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);
Tutto ciò che serve quindi è quello di ottenere il giusto set classpath durante l'esecuzione del programma chiamante.
Altri suggerimenti
Lo stesso problema si è verificato a me di recente, finalmente ho trovato due soluzioni. È possibile impostare il percorso di classe o da invoke StandardJavaFileManager.setLocation (StandardLocation.CLASS_PATH, "YOUR_CLASS_PATH") o Compiler.getTask (ARG_0, Arg_1, ARG_2, CLASS_PATH_OPTIONS, proprio come la prima risposta postato qui, dice.