Как захватить аргументы, переданные в сценарий Groovy?


Я только начинаю с Groovy. Я не мог найти никаких примеров того, как обрабатывать аргументы в Groovy script, и поэтому я сам взломал этот метод. Там должен быть лучший способ сделать это? Если это так, я ищу этот лучший способ, так как я, вероятно, упускаю из виду очевидное.

import groovy.lang.Binding;
Binding binding = new Binding();
int x = 1
for (a in this.args) {
  println("arg$x: " + a)
  binding.setProperty("arg$x", a);
  x=x+1
}
println binding.getProperty("arg1")
println binding.getProperty("arg2")
println binding.getProperty("arg3")
5 54

5 ответов:

Если вы хотите более продвинутый разбор, чем просто получение аргументов, вы можете использовать Groovy CliBuilder, чтобы помочь вам. Это поможет вам с флагами командной строки, необязательными аргументами и печатью инструкции по использованию.

оформить заказ CliBuilder ' S Javadoc или MrHakis post об этом.

извините за вопрос. Я только что понял:

println args[0]
println args[1]
println args[2]

самое простое-это просто использовать this.args в виде массива, например:

Это очень похоже на Java, и вы можете использовать тот же синтаксис java. Например.

class TestExecutor {

    public static void main(def args) {
        println("Printing arguments");
        for(String arguments : args) {
            println (arguments);
        }
    }

} 

запустите его, и вы должны увидеть аргументы напечатаны

C:\Users\athakur\Desktop>groovy TestExecutor.groovy test1 test2 test3
Aug 16, 2014 11:47:56 AM org.codehaus.groovy.runtime.m12n.MetaInfExtensionModule
 newModule
WARNING: Module [groovy-nio] - Unable to load extension class [org.codehaus.groo
vy.runtime.NioGroovyMethods]
Printing arguments
test1
test2
test3

также обратите внимание, если вы не предоставляете основной метод или предоставить один, как в приведенном выше примере, то вы можете получить аргументы как args[i] но вы можете изменить имя массива (опять же как Java). Так что вы можете иметь что-то вроде -

public static void main(def argsNew) {
    println("Printing arguments");
    for(String arguments : argsNew) {
        //using args in above for loop will throw error
        println (arguments);
    }
}

дело в том, что это не то, что жестко закодировано. Наконец, как предложенный в другом ответе вы всегда можете использовать CliBuilder для интеллектуального разбора. Но опять же в том, что тоже он внутренне использовал def options = cli.parse(args).

попробуйте это:

args.each{println it}