L'appel d'une Groovy fonction de Java
Comment appeler une fonction définie dans un fichier de script Groovy à partir de Java?
Exemple groovy script:
def hello_world() {
println "Hello, world!"
}
J'ai regardé le GroovyShell, GroovyClassLoader, et GroovyScriptEngine.
- Voir celui-ci stackoverflow.com/questions/5267481/...
Vous devez vous connecter pour publier un commentaire.
En supposant que vous avez un fichier nommé
test.groovy
, qui contient (comme dans votre exemple):Ensuite, vous pouvez créer un fichier
Runner.java
comme ceci:le compiler avec:
(Remarque: Les avertissements sont laissé comme exercice au lecteur) 😉
Ensuite, vous pouvez exécuter cette Runner.class avec:
/src/main/groovy
, parce que sinon, la classe java ne le trouverez pas. Une autre option est de modifier en quelque sorte gradle script, mais malheureusement, je ne suis pas un gradle profy pour ce faire 🙁src/main/groovy
au lieu desrc/main/java
src/main/java
, mon groovy fichier danssrc/main/groovy
, appelégradle clean run
et a obtenuException in thread "main" java.io.FileNotFoundException: test.groovy
. Quand j'ai mis groovy fichier dans un dossier racine du projet,gradle clean run
a été un succès.gradle clean distZip
il n'y a pas de fichier groovy l'intérieur du fichier zip.La façon la plus simple consiste à compiler le script dans un fichier de classe java et viens de l'appeler directement. Exemple:
Soit
Un avantage de le printemps approche, c'est le concept de "actualisable haricots". Qui est, le Printemps peut être configuré pour surveiller votre fichier de script pour les modifications, et de les remplacer au moment de l'exécution.
Vous aussi, vous pouvez utiliser le Bean Script Cadre inclure n'importe quel langage de script dans votre code Java. BSF vous donner la possibilité d'intégrer d'autres langues, mais n'est pas l'intégration native.
Si vous sont clairement orientés à utiliser Groovy l'GroovyScriptEngine est la solution la plus complète.
=)
Un exemple simple:
De test
Juste plus élégante des façons:
Et si le script classe étend
groovy.lang.Script
:Pas nécessaire d'étendre
groovy.lang.Script
si vous voulez juste appelermain
méthode de votre groovy classe: