2009-02-19 11 views
5

¿Existe alguna otra opción además de Janino para la compilación y ejecución sobre la marcha del código de Java en v5? Sé que v6 tiene la API del compilador, pero necesito trabajar con la VM v5.Opciones para la compilación dinámica en Java 5

Básicamente necesito tomar una cadena que contenga una clase completa de Java, compilarla y cargarla en la memoria.

+0

¿Hay alguna razón por la que no esté interesado en Janino? ¿Estás buscando las otras opciones o hay un problema específico que está causando? – MBCook

+0

Janino es genial, pero estoy buscando funciones de lenguaje más avanzadas que no sean compatibles con Janino. En realidad, Janino es lo que estamos usando actualmente. –

Respuesta

6

Lo que queremos es algo así como Janino. Lo hemos usado por años. Le das el código (cerca del estándar) y te da las clases para que puedas usarlos. En realidad tiene bastantes modos diferentes y es compatible con el azúcar sintáctico 1.5 y el auto-boxeo y tal.

Si llama a javac, no solo tendrá que estar preparado para todo lo que haga, entonces deberá manejar la colocación de la clase en el lugar correcto o crear un cargador de clases adicional.

Janino es muy fácil. Debe ser exactamente lo que estás buscando.

+0

Alguien no leyó la primera oración de la pregunta ... –

+0

Guau, tienes razón. ¿Cómo extrañé eso? – MBCook

+0

+1 solo porque eres tan apasionado con la solución que te perdiste la primera oración. –

2

Todos los servidores de aplicaciones hacen esto para JSP para siempre, por lo que obviamente es posible. Verifique el código fuente de Tomcat tal vez?

5

Invocación javac programáticamente:

http://www.juixe.com/techknow/index.php/2006/12/12/invoke-javac-at-runtime/

 
    com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main(); 

    String[] options = new String[] 
    { 
     "-classpath", classpath, "-d", outputDir, filename 
    }; 

    javac.compile(options); 
+0

Esto requiere escribir en un archivo. Desafortunadamente, la variedad de entornos de implementación lo hace prohibitivo. +1 Por la buena ventaja, sin embargo. –

+0

¿Qué necesitarías para tener el resultado final como? – TofuBeer

Cuestiones relacionadas