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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top