Uso la clase javax.tools.JavaCompiler
(jdk6) para compilar un archivo fuente, pero el archivo fuente depende de algún archivo jar. Cómo establecer el classpath del javax.tools.JavaCompiler
?Cómo establecer classpath cuando uso javax.tools.JavaCompiler compile el código fuente?
Respuesta
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.
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.
Para que esto funcione, tuve que hacer 'StandardJavaFileManager.setLocation (StandardLocation.CLASS_PATH, Arrays.asList (new File (classpath)));' –
- 1. Establecer carpeta para classpath
- 2. ¿Cómo perfilo el código cuando uso knitr?
- 3. código Java: buscando el código fuente
- 4. ¿Cómo uso los datos en package_data desde el código fuente?
- 5. Cómo establecer java-classpath para dos directorios?
- 6. ¿Puedo establecer un punto de interrupción en un código fuente de la aplicación administrada cuando uso WinDbg?
- 7. ¿Apple ve el código fuente real cuando aprueba las aplicaciones?
- 8. Establecer CustomupExtension desde el código
- 9. ¿Dónde está el código fuente del compilador de Java?
- 10. Uso de Unicode en el código fuente de C++
- 11. establecer UIButton fuente
- 12. Cómo analizar el código fuente de Blender
- 13. VTK/Python/compile
- 14. Imprimir flujo de código fuente cuando se ejecuta el programa
- 15. ¿Cómo proteger mi código fuente cuando se despliega?
- 16. Fuente para programar el código fuente con LaTeX
- 17. ¿Cómo establecer un enlace en el Código?
- 18. Filtrar el código fuente en Maven
- 19. ¿Cómo establecer un largo classpath de Java en Windows?
- 20. ¿Cómo sangrar automáticamente el código fuente?
- 21. ¿Cómo obtengo el código fuente de Ubuntu?
- 22. Cómo indexar el código fuente con ElasticSearch
- 23. ¿Cómo resaltar el código fuente en HTML?
- 24. Inconsistencia al establecer el tamaño de la fuente TextView en el código y en los recursos
- 25. Código de error -1011 cuando uso AFNetWorking
- 26. ¿Cómo veo el código fuente de JRE en Eclipse?
- 27. ¿Cómo detectar duplicados JAR en el classpath?
- 28. ¿Cómo evito la compilación implícita de Java cuando la clase existe en el classpath?
- 29. Cómo ver el código fuente de R (pre-análisis)
- 30. ¿Cómo personalizo el comentario generado automáticamente cuando uso la generación de código CodeDom de .NET?
Satheesh publicado esto como una respuesta, "¿Serías capaz de compartir tu envoltorio de compilación (el enlace no funciona) gracias de antemano". –
gracias a un molino por este post, he estado luchando con esto por años y esta fue la respuesta ... aplausos :) – flexinIT
BTW, la opción 'classpath' de' JavaCompiler' no "entiende" los comodines. Entonces, cada 'jar' debe agregarse directamente en esta cadena. – Andremoniy