2009-12-25 6 views
2

Je suis sur le point de commencer à développer une petite application de bureau Java. L'application est juste un moteur pour lequel l'utilisateur fournit des classes Java pour faire le travail (traduire l'entrée en sortie).Compilation Java dynamique: BeanShell, Janino, JavaCompiler?

J'aimerais que l'utilisateur fournisse des classes Java réelles en tant que fichiers pouvant être chargés (et rechargés) à la volée.

Pour cette utilisation particulière, existe-t-il une raison quelconque pour laquelle Java serait plus encombrant que Groovy ou Beanshell? Je ne demande pas de comparaison entre Groovy/Beanshell et Java car ils sont nombreux. Plutôt, je veux savoir s'il est plus facile de charger dynamiquement des classes Groovy ou Beanshell à partir des fichiers par rapport à Java.

Pour Java 1.6, le JavaCompiler est-il le meilleur moyen de charger dynamiquement du code? Je voudrais utiliser toutes les fonctionnalités de la langue, donc je pense que Janino est sorti. En outre, des problèmes avec le rechargement?

Note: J'ai vu this et this, mais je ne suis pas sûr qu'ils répondent à ma question.

Répondre

3

JavaCompiler est très polyvalent, mais il entraîne un problème de configuration mineure, potentiel: Dans javax.tools, ToolProvider.getSystemJavaCompiler() identifie la classe du compilateur com.sun.tools.javac.api.JavacTool. Sur certaines plateformes, cette classe ne fait pas partie de JRE; un JDK semble être requis. Voici un example.

En outre considérer javax.script, discuté here. Plusieurs scripting engines sont pris en charge.

+0

Merci pour cela. Une raison de préférer quelque chose comme Rhino sur l'un des langages courants "chauds" (Groovy, surtout)? –

+1

Je suppose que cela dépend de la préférence des utilisateurs. Si vous ciblez une implémentation compatible javax.script, vous pouvez autoriser vos utilisateurs à choisir parmi une liste de langues prises en charge. – trashgod

+0

Bon point. Merci, toujours en considération, je vais vérifier dans les moteurs de script aussi. –