2009-02-19 6 views
5

Existe-t-il des options autres que Janino pour la compilation à la volée et l'exécution du code Java dans la version 5? Je sais que v6 a l'API du compilateur, mais j'ai besoin de travailler avec la VM v5.Options pour la compilation dynamique en Java 5

Je dois essentiellement prendre une chaîne contenant une classe Java complète, la compiler et la charger en mémoire.

+0

Y a-t-il une raison pour laquelle Janino ne vous intéresse pas? Cherchez-vous simplement les autres options ou y a-t-il un problème spécifique? – MBCook

+0

Janino est génial, mais je suis à la recherche de fonctionnalités linguistiques plus avancées qui ne sont pas supportées par Janino. En fait, Janino est ce que nous utilisons actuellement. –

Répondre

6

Qu'est-ce que vous voulez est quelque chose comme Janino. Nous l'avons utilisé pendant des années. Vous lui donnez du code (proche de la norme) et il vous donne les classes pour que vous puissiez les utiliser. Il a en fait pas mal de modes différents et supporte le sucre syntaxique 1.5 et l'auto-boxing et autres.

Si vous appelez javac, vous devrez non seulement être prêt à faire quoi que ce soit, mais vous devrez aussi gérer la classe au bon endroit ou créer un classloader supplémentaire.

Janino est très facile. Ce devrait être exactement ce que vous cherchez.

+0

Quelqu'un n'a pas lu la première phrase de la question ... –

+0

Wow, vous avez raison. Comment ça m'a manqué? – MBCook

+0

+1 juste parce que vous étiez si passionné par la solution que vous avez manqué la première phrase. –

2

Tous les serveurs d'application le font pour JSP pour toujours, donc c'est évidemment possible. Checkout Tomcat code source peut-être?

5

Invoquer javac programatically:

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

Cela nécessite d'écrire dans un fichier. Malheureusement, la variété des environnements de déploiement rend cela prohibitif. +1 Pour la bonne avance, cependant. –

+0

De quoi auriez-vous besoin pour obtenir le résultat final? – TofuBeer

Questions connexes