Cómo establecer la ruta de clases cuando uso javax.tools.JavaCompiler compilar el código fuente?

StackOverflow https://stackoverflow.com/questions/1563909

Pregunta

Yo uso la clase javax.tools.JavaCompiler (jdk6) para compilar un archivo de origen, pero el archivo de origen depende de algunos archivo jar. Cómo establecer la ruta de clase del javax.tools.JavaCompiler?

¿Fue útil?

Solución

La javax.tools.JavaCompiler # getTask () método toma un parámetro options que permite configurar las opciones del compilador. El mensaje rel="noreferrer"> href="http://forums.sun.com/thread.jspa?messageID=10377161#10377161" siguiente describe una manera fácil de configurar con el fin de acceder al ruta de clase del programa de llamada:

  

Es necesario configurar la norma   administrador de archivos java para saber acerca de la   archivos JAR (s) - que utilizan el compilador   opciones de argumentos para hacerlo.

     

Por defecto, el objeto de Java compilador   sólo parece saber sobre el valor por defecto   lugares para bootclasspath, extdirs   y endorseddirs directorios en términos   de su ruta de clase.

     

Es necesario añadir el programa de llamada   ruta de clases actual para el compilador de Java   ejemplo de lo que se pasa en el   el administrador de archivos estándar, que se   a continuación, encontrar las clases en los archivos jar.

     

Así es como lo hago en el compilador   Envoltura escribí

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);

Todo lo que necesita entonces es conseguir que el conjunto de ruta de clase adecuada cuando se ejecuta el programa de llamada.

Otros consejos

El mismo problema se me ocurrió hace poco, por fin encontré dos soluciones. Puede establecer la ruta de clase ya sea por invocar StandardJavaFileManager.setLocation (StandardLocation.CLASS_PATH, "YOUR_CLASS_PATH") o Compiler.getTask (ARG_0, Arg_1, ARG_2, CLASS_PATH_OPTIONS, al igual que la primera respuesta publicada aquí dice.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top