parece ser imposible utilizar javax.tools.ToolProvider
de un cargador de clase personalizada como lo requiere la hormiga o Webstart: http://bugs.sun.com/view_bug.do?bug_id=6548428¿Cómo usar javax.tools.ToolProvider desde un cargador de clases personalizado?
javax.tools.ToolProvider.getSystemJavaCompiler()
cargas javax.tools.JavaCompiler
en un URLClassLoader cuyo padre es el cargador de clases del sistema. La API no parece permitir a los usuarios especificar un cargador de clases principal.
¿Cómo se puede usar javax.tools.JavaCompiler
desde un cargador de clases personalizado?
Por ejemplo:
- cargas Ant
MyParserTask
MyParserTask
analiza Java código fuenteMyParserTask
es cargado porAntClassLoader
que los delegados a la classloader sistemajavax.tools.JavaCompiler
es cargado porURLClassLoader
thast delegados al sistema classloader
En un momento posterior, MyParserTask
invoca:
javax.tools.CompilationTask task = compiler.getTask(...);
com.sun.source.util.JavacTask javacTask = (com.sun.source.util.JavacTask) task;
javacTask.parse().next().accept(visitor, unused); // parsing happens here
- ver cómo las dos clases residen en cargadores de clases separadas, no parece ser un camino para
MyParserTask
para interactuar conJavacTask
sin conseguirClassCastException
errores.
¿Alguna idea?
Reescribí la pregunta para centrarme en CompilationTask. Por favor echa un vistazo. – Gili