martes, 19 de octubre de 2010

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:
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


1 comentario:

  1. Muy buen dato Diego. Interesante para tener en cuenta. Saludos

    ResponderEliminar

Si quieres hacer una pregunta más específica, hazla en los foros que tenemos habilitados en Google Groups


Ah! solo se permiten comentarios de usuarios registrados. Si tienes OpenID, bienvenido! Puedes obtener su OpenID, aquí: http://openid.net/