Thématiques principales

mardi 23 janvier 2018

Pont avec Groovy

Lors de développement logiciel, il arrive que l'on ait besoin de déporter du code dans des scripts de façon a ce que l'application soit plus simple a reconfigurer. Dans le cas du code Java, il est possible également d'affiner des algorithmes dans des scripts groovy.

Cependant ce n'est pas forcement immédiat de coupler les deux langages et il faut passer par un chargeur de scripts.

Pour cela il est nécessaire d'inclure la dépendance maven suivant:


1
2
3
4
5
<dependency>
 <groupId>org.codehaus.groovy</groupId>
 <artifactId>groovy-all</artifactId>
 <verion>2.4.12</version>
</dependency>


Une fois la dépendance mise dans notre pom, il va falloir employer la GroovyShell afin de parser le code groovy. Au passage on pourra donner a notre Shell un Binding afin de remplir les variables éventuelles qui seront a donner aux scripts si ces derniers sont des Templates.

Enfin il faut exécuter le script Groovy pour en récupérer le résultat.

Si l'on considere le script groovy suivant contenu dans le fichier monScript.groovy:

println "hello world," + $argument

Bon ok ca fait pas grand chose, mais c'est pour l'exemple. On notera juste ici, l'emploie de $argument qui devra etre remplacer par un binding.

On va alors elaborer un chargeur pour le script, definir le binding, puis l'executer


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
public static void main(String[] args) {
 Binding binding = new Binding();
 binding.setVariable("$argument", " parceque c'est groovy!");
 GroovyShell shell = new GroovyShell(binding);
 try {
  // Chargement du script groovy
  Script s=shell.parse(new File("src/main/scripts/monScript.groovy"));
  // Exécution du script
  Object retour = s.run();
  // Affichage de la valeur de retour du script
  if(retour!=null)
   System.out.println(retour);
 } catch (CompilationFailedException e) {
  e.printStackTrace();
 } catch (IOException e) {
  e.printStackTrace();
 }
}


Et la console nous donne le résultat d’exécution du script:
hello world, parceque c'est groovy!

Aucun commentaire:

Enregistrer un commentaire