¿Cómo proporcionar una interfaz a JavaCompiler al compilar dinámicamente un archivo fuente?
dynamic runtime (3)
¿Has considerado generar tu clase con javassist o algo así?
Estoy intentando compilar y cargar una clase en tiempo de ejecución, sin conocer el paquete de la clase. Sé que la clase debe cumplir con una interfaz y la ubicación de la fuente (y, por lo tanto, el nombre de la clase). Estoy intentando lo siguiente:
/* Compiling source */
File root = new File("scripts");
File sourceFile = new File(root, "Test.java");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, sourceFile.getPath());
donde el archivo Test.java se ve algo así como
import foo.Itest;
public class Test implements Itest{
...
}
Y obtengo un cannot find symbol symbol : class Itest
error cannot find symbol symbol : class Itest
del compilador. ¿Cómo proporciono al compilador la interfaz (que ya se ha cargado) para evitar este error?
[EDITAR - RESUELTO]: El error vino del hecho de que la interfaz era ITest
y la fuente referida a una interfaz de Itest
.
No estoy seguro de si esto es lo que está buscando pero, como menciona @Phil aquí , podría intentar pasar un argumento de ruta de clase en su método compiler.run
.
Parece probable que el compiler.run()
esté ejecutando externamente y necesite que se establezca la ruta de la clase. ¿Has intentado pasarle una configuración de ruta de clase adecuada usando el último parámetro args
a la llamada run()
? Quizás es por eso que ToolProvider.getSystemToolClassLoader()
.
Esta publicación de también podría ayudarte.