Démarrer un script groovy avec #!/usr/bin/env groovy
a une limitation très importante - Aucun argument supplémentaire ne peut être ajouté. Aucun classpath ne peut être configuré, pas d'exécution de groovy avec defines ou en debug. Ce n'est pas un groovy mais une limitation dans la façon dont le shebang ( #!
) fonctionne - tous les arguments supplémentaires sont traités comme un seul argument, donc #!/usr/bin/env groovy -d
dit /usr/bin/env
pour exécuter la commande groovy -d
rathen alors groovy
avec un argument de d
.
Il existe une solution de contournement pour ce problème, qui consiste à démarrer groovy avec bash. dans le groovy script.
#!/bin/bash
//usr/bin/env groovy -cp extra.jar:spring.jar:etc.jar -d -Dlog4j.configuration=file:/etc/myapp/log4j.xml "$0" $@; exit $?
import org.springframework.class.from.jar
//other groovy code
println 'Hello'
Toute la magie se produit dans les deux premières lignes. La première ligne nous dit que c'est un bash
script. bash
commence à courir et voit la première ligne. Sur bash
#
est destiné aux commentaires et //
est réduit à /
qui est le répertoire racine. Donc bash
fonctionnera /usr/bin/env groovy -cp extra.jar:spring.jar:etc.jar -d -Dlog4j.configuration=file:/etc/myapp/log4j.xml "$0" $@
qui lance groovy avec tous les arguments souhaités. Le site "$0"
est le chemin vers notre script, et $@
sont les arguments. Maintenant groovy s'exécute et il ignore les deux premières lignes et voit notre groovy script et ensuite retourne à bash
. bash
puis sort ( exit $?1
) avec le code d'état de groovy.
2 votes
Il semble que cette question ait déjà été posée : stackoverflow.com/questions/254385/
0 votes
Comme indiqué dans les réponses ci-dessous, il est préférable d'utiliser
#!/bin/sh
et ensuite appelergroovy
avec les arguments que vous voulez. Le minimum serait#!/bin/sh\n groovy -cp PATH-OR-JAR $@
pour passer tous les arguments passés sur la ligne de commande à la commande groovy. Sous Windows, ce seraitgroovy -cp PATH %*