Compilando y ejecutando una clase java.... desde java
El JDK 6 viene con varias funcionalidades interesantes, entre ellas la compilación de clases java desde el mismo java.
La instancia que se encarga de tal tarea es JavaCompiler pero su instancia se obtiene desde el método ToolProvider.getSystemJavaCompiler().
La compilación se resume a una simple instrucción:
Hay más opciones de compilación, como por ejemplo obtener los errores de compilación, y compilación en memoria. Para más opciones de la clase, revisar el API de javax.tools.JavaCompiler.
Ahora bien, ¿cómo se puede ejecutar una clase compilada? Pues se necesita cargarlo en la memoria del JVM. Fácil.... pero el reto es hacerlo en ejecución, ya que si no está en el classpath de la aplicación nunca se podrá ejecutar. Y como sabía que alguien me haría esta pregunta, hice aquí un ejemplo de ello: compilar y luego ejecutar el compilado.
Lo que hice fue redefinir el método
Aquí les dejo el ejemplo para que se diviertan un rato.
Código ejemplo
http://kenai.com/projects/apuntes/downloads/download/ejemplos%252Fjdk%252FCompilandoJava.tar.gz
La instancia que se encarga de tal tarea es JavaCompiler pero su instancia se obtiene desde el método ToolProvider.getSystemJavaCompiler().
La compilación se resume a una simple instrucción:
JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
int resultado = javaCompiler.run(null, null, null, "Factorial.java");
Hay más opciones de compilación, como por ejemplo obtener los errores de compilación, y compilación en memoria. Para más opciones de la clase, revisar el API de javax.tools.JavaCompiler.
Ahora bien, ¿cómo se puede ejecutar una clase compilada? Pues se necesita cargarlo en la memoria del JVM. Fácil.... pero el reto es hacerlo en ejecución, ya que si no está en el classpath de la aplicación nunca se podrá ejecutar. Y como sabía que alguien me haría esta pregunta, hice aquí un ejemplo de ello: compilar y luego ejecutar el compilado.
Lo que hice fue redefinir el método
loadClass()
de la clase java.lang.ClassLoader
, cargarlo en bytes el archivo binario .class y luego convertirlo en una clase java. Aquí les dejo el ejemplo para que se diviertan un rato.
Código ejemplo
http://kenai.com/projects/apuntes/downloads/download/ejemplos%252Fjdk%252FCompilandoJava.tar.gz
Muy buen dato Diego. Interesante para tener en cuenta. Saludos
ردحذف