Código fuente de la clase de carga
Importar Java .io excepción
Importar Java método <. /p>
Importar Java.net.uri;
Importar Java.net.urisynctaxexception;
Importar Java.util.arrays;
Importar javax .tools.Java compilador;
Importar herramientas javax.
Importar objeto de archivo Java. herramientas .javafileobject simple ;
Importar herramientas javax .javafilemanager estándar
Importar herramientas javax . p>*Compilación dinámica de archivos fuente de Java
*
* @author神 Beast儿
*
*/
Prueba del compilador de clase pública {
Public static void main(String[] args) arroja una excepción {
String source = " public class Main { " " public static void Main( String[]args ){ "
" system . println(\ " ¡Hola mundo! \");
Compilador Java = herramienta proveedor . getsystemjavacompiler( );
Administrador de archivos StandardJavaFileManager = compilador . getstandardfilemanager(null, null, null);
Objeto fuente StringSourceJavaObject = new CompilerTest. StringSourceJavaObject("Principal",
Fuente);
Iterable lt? Extienda JavaFileObject gtfile object = arrays. aslist(source object);
//Obtenga la ruta raíz de la clase compilada; de lo contrario, se informará un error y no se podrá encontrar la clase.
ruta de cadena = clase .getclass(). obtenerRecurso("/").
getPath();
Cadena iterable lt gtoptions = Arrays.asList("-d ", ruta);
//Agregar parámetros de opción
// compilación tarea tarea = compilador obtener tarea (nulo, administrador de archivos, nulo, nulo, nulo, objetos de archivo);
tarea de compilación = compilador obtener tarea (nulo, administrador de archivos, nulo, opciones, nulo, objetos de archivo. );
Resultado booleano = tarea . call();
if (resultado){
System.out.println("Compilación exitosa.");
cargador de clases = prueba del compilador. obtener cargador de clases();
Pruebe {
Clase lt? gtclazz = loader . load class(" Main ");
método método = clazz . get método(" main ", String[]. class); parámetros; de lo contrario, se informará falsamente el número de parámetros.
//Valor del objeto = método. invoke(nulo, nuevo objeto[]{ });
Valor del objeto = método.invoke(nulo, nuevo objeto[]{ nueva cadena[ ]{ } });
System.out.println(valor);
} catch(Exception e) {
e . /p>
}
}
}
La clase estática StringSourceJavaObject extiende SimpleJavaFileObject {
Contenido de cadena privada = nulo p>
público StringSourceJavaObject(nombre de cadena, contenido de cadena) lanza URISyntaxException {
super(uri . create(" cadena:///" nombre . reemplazar(' . ') ,'/') Kind.SOURCE.extension),
Amabilidad. fuente);
this.content = content;
}
secuencia de caracteres públicos getCharContent(booleano ignorar errores de codificación) lanza IOException {
Devolver contenido;
}
}
}