Cómo establecer la ruta de clases cuando uso javax.tools.JavaCompiler compilar el código fuente?
-
21-09-2019 - |
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
?
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.