2009-10-14 12 views

Respuesta

36

El método javax.tools.JavaCompiler#getTask() toma un parámetro options que permite establecer las opciones del compilador. La siguiente message describe una manera fácil de configurar con el fin de acceder a la ruta de clase del programa de llamada:

Es necesario configurar el gestor de archivos estándar java saber acerca de los archivos jar (s) - utiliza el compilador argumento de opciones para hacer eso.

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

es necesario agregar la ruta de clase actual del programa que llama al compilador de Java de la cual se pasa sobre la el administrador de archivos estándar, que se encuentra a continuación clases en los archivos jar de ejemplo.

Así es como lo hago en the compiler wrapper I wrote

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.

+0

Satheesh publicado esto como una respuesta, "¿Serías capaz de compartir tu envoltorio de compilación (el enlace no funciona) gracias de antemano". –

+0

gracias a un molino por este post, he estado luchando con esto por años y esta fue la respuesta ... aplausos :) – flexinIT

+2

BTW, la opción 'classpath' de' JavaCompiler' no "entiende" los comodines. Entonces, cada 'jar' debe agregarse directamente en esta cadena. – Andremoniy

2

El mismo problema se me ocurrió recientemente, finalmente 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.

+0

Para que esto funcione, tuve que hacer 'StandardJavaFileManager.setLocation (StandardLocation.CLASS_PATH, Arrays.asList (new File (classpath)));' –

Cuestiones relacionadas