java dynamic runtime compilation classloader

¿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.