Comment puis-je compiler et déployer une classe java au moment de l'exécution?
Je suis dans le processus de l'écriture d'un moteur de règles qui effectue des tâches simples, comme déterminé par les constructions conditionnelles. C'est une condition sine qua non du projet pour que les règles soient au format XML. J'ai modelé mon schéma XML pour ressembler à de simples blocs de code. Je souhaite parser le XML, puis de le transformer en code Java. Ensuite, je souhaite compiler (et exécuter) ce code au moment de l'exécution. Le faire signifierait que mon moteur de règle n'agit plus comme un interprète, mais s'exécute natif Java Byte Code.
J'ai compris l'analyse de la scène et plus ou moins la génération de code Java phase. Je voudrais maintenant à la figure de la dernière phase de la compilation à l'exécution de la phase.
Suite à ce fil: Compile en bytecode java (sans l'aide de Java) j'ai pris conscience de la suite de solutions possibles:
J'aimerais une comparaison de ces ainsi que d'autres suggestions pour résoudre le Java compiler au moment de l'exécution de la phase.
- Couple de pointeurs pour vous: 1) télécharger le fichier Tomcat source, lorsqu'il crée les classes pour les Jsp qu'il a à faire exactement ce que vous décrivez. 2) prendre un coup d'oeil à Drools (jboss.org/drools). Je l'ai utilisé dans le passé et il est assez puissant quand il s'agit de règles de moteurs.
- Avez-vous jamais obtenir cette application est terminée? Je serais intéressé de voir comment il fonctionne si vous êtes en mesure de partager les sources.
- Heureux que vous avez montré de l'intérêt. Malheureusement, l'application a pris un tour ailleurs. J'ai fait de continuer à utiliser la version 6 de Java Compilateur API, mais pour une autre beaucoup plus simple portée. En d'autres termes, le code XML bloque toujours interprété pas compilées à ce jour... je ne peux pas poster le code que j'ai fait écrire, car il est la propriété de...
Vous devez vous connecter pour publier un commentaire.
Utiliser le La version 6 de Java Compilateur API.
Vous pourriez transformer en Clojure code, et le Clojure compilateur va le transformer en bytecode pour vous.
ici est de java utilitaire de compilation, vous pouvez compiler votre code au moment de l'exécution, sans bytecode outil
http://code.google.com/p/compilation-toolbox/
Groovy, BeanShell ou tout autre langage de script qui est basé sur la JVM ont une telle facilité à injecter, de modifier, d'ajouter et d'exécuter du code lors de l'exécution. En fait tout le langage de script sont interprétés, donc, en fait, ceux qui ne sont pas de la compilation à l'exécution.
Javassist est presque un compilateur Java écrit en Java, et il est entièrement réalisé en Java. Vous ne pouvez pas donner un tout .java fichier à la fois, mais vous pouvez lui donner de la chaîne de code pour les différentes fonctions et les ajouter à la même CtClass objet, qui devient le bytecode puis un java.lang.Class.
Je viens de sortir la version 0.1 de GigaLineCompile, qui utilise Javassist (compilateur) et Beanshell (interprète) et vous donne plus de contrôle qui code pour l'optimiser et quand. Dans les versions ultérieures, il va changer entre Javassist et Beanshell à une plus petite granularité donc si vous avez de nombreuses chaînes de code qui partagent des sous-chaînes, les chaînes seront compilés et les autres parties exécuter en beanshell. Surtout utile pour l'intelligence artificielle qui génère du code Java, mais il est aussi une alternative à Clojure ou les extrêmes de Javassist/Beanshell seul.
Javassist, Beanshell, et GigaLineCompile peut être téléchargé (avec la source) ici:
http://sourceforge.net/projects/gigalinecompile
Epargnez-vous les tracas et l'utilisation BeanShell que fait allusion ici L'exécution de code java donnée dans un fichier texte.
vous pouvez fourche d'un tel processus de
et permet de compiler et de l'exécuter.