Y a-t-il un moyen pour un programme Java en cours de compilation de code source Java (transmis comme une chaîne)? Idéalement, toutes les classes référencées par le code source transbordé seraient résolues. Par le chargeur de classe du programme. P> fait quelque chose comme ça existe? P> P>
5 Réponses :
Bien sûr. Regardez le Ils ont été autour depuis Java 1.6. P>
(Comme indiqué par @Sergey Tachenov dans les commentaires, il a besoin de JDK pour être installé car le fichier outils nécessaire.jar est livré avec JDK mais pas JRE.) P> Javacompiler code> classe et les autres classes dans le javax.tools code> package. p>
Je pense qu'il convient de noter que cela ne fonctionne pas avec le JRE de Sun, il a besoin de JDK pour être installé comme le fichier outils nécessaire.jar est livré avec JDK mais pas JRE.
J'ai essayé cet exemple, j'ai un java.lang.classnotfoundException: test code> sur classe > Clazz = classe.forname ("test"); code>!
Le répertoire de sortie de la compilation est-il sur le chemin de la classe?
dépend de ce que vous voulez faire. Si vous voulez simplement exécuter du code, vous pouvez utiliser Beanshell. Ce n'est pas une classe compilée Java, mais est très utile de faire quelque chose de flexible p>
Vous pouvez essayer ma bibliothèque JCF Essence qui fait cela. Lors de l'exécution de débogage, vous pouvez avoir la source écrite dans un fichier afin que vous puissiez entrer dans le code. Sinon, tout fait en mémoire. Il enveloppe le javacompiler dans les outils.jar p>
Il faut une chaîne, compile et le charge dans le chargeur de classe actuelle et renvoie la classe. Il gère des classes imbriquées / intérieures. P>
http: // vanillajava. blogspot.com/2010/11/more-eux-for-dynamic-code-in-java.html P>
Remarque: je n'ai pas fonctionné à Osgi. ;) p>
Javassist peut générer et charger des classes d'exécution et des méthodes à partir de chaînes de code source. Il est également possible de jeter dans le système de fichiers la classe générée si vous en avez besoin. P>
Il existe actuellement des limitations mineures dans le code que vous pouvez passer dans ces chaînes, par exemple, il ne peut pas inclure des génériques, des énumérations ou de l'autoboxage et de la boîte de réception des primitives. Plus d'informations ici: P>
Ce dont vous avez besoin est une classe qui étend javafileObject qui peut être utilisé comme suit: p>
Où avez-vous déclaré la variable code> compilationpath code>?
Il est plus haut dans le code, juste une corde vraiment
J'ai trouvé cet exemple, ce dont j'ai besoin exactement. ibm.com/developerworks/java/library/j-jcomp/ index.html