Comment puis-je passer des arguments à une Groovy 2.0 script?
J'ai 2 scripts, où je suis en train de tester en passant un argument, et il échoue. J'ai examiné la documentation de GroovyScriptEngine mais il ne semble pas gérer le cas où je veux passer un arg plutôt que la valeur d'une propriété de la paire (en liaison).
Voici l'erreur que je reçois:
C:\AeroFS\Work\Groovy_Scripts>groovy scriptengineexample.groovy
hello, world
Caught: groovy.lang.MissingPropertyException: No such property: args
for class: hello
groovy.lang.MissingPropertyException: No such property: args for
class: hello
at hello.run(hello.groovy:4)
at Test.main(scriptengineexample.groovy:14)
Voici mes scripts:
import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;
import groovy.util.ResourceException ;
import groovy.util.ScriptException ;
import java.io.IOException ;
public class Test {
public static void main( String[] args ) throws IOException,
ResourceException, ScriptException {
GroovyScriptEngine gse = new GroovyScriptEngine( [ '.' ] as String[] )
Binding binding = new Binding();
binding.setVariable("input", "world");
gse.run("hello.groovy", binding);
System.out.println( "Output: " + binding.getVariable("output") );
}
}
Et celui-ci:
//hello.groovy
println "hello.groovy"
for (arg in this.args ) {
println "Argument:" + arg;
}
- Ne devrait pas être setVariable(args ["entrée","le monde"])?
Vous devez vous connecter pour publier un commentaire.
Bonjour, est à la recherche d'un tableau de chaîne dans la liaison appelé
args
. Ceci est fournie automatiquement pour vous lorsque vous exécutez le script via la ligne de commande, mais si vous l'exécutez en dehors de ce contexte, vous devez l'ajouter à laBinding
vous-même:Cela va passer les arguments envoyés à
Test
grâce àHello
comme-est:Si vous souhaitez envoyer des arguments spécifiques, vous devez construire la matrice de vous-même:
Encore plus simple, la Liaison de la classe a un Constructeur qui prend une Chaîne de caractères[], et l'ajouter en tant que 'args' de sorte que vous pouvez simplement faire ceci: