Estoy tratando de usar el maravilloso CliBuilder para analizar las opciones de línea de comandos. Estoy tratando de usar múltiples opciones largas sin una opción corta. Tengo el siguiente procesador:Groovy CliBuilder: solo se tomó LongOpt en la cuenta
def cli = new CliBuilder(usage: 'Generate.groovy [options]')
cli.with {
h longOpt: "help", "Usage information"
r longOpt: "root", args: 1, type: GString, "Root directory for code generation"
x args: 1, type: GString, "Type of processor (all, schema, beans, docs)"
_ longOpt: "dir-beans", args: 1, argName: "directory", type: GString, "Custom location for grails bean classes"
_ longOpt: "dir-orm", args: 1, argName: "directory", type: GString, "Custom location for grails domain classes"
}
options = cli.parse(args)
println "BEANS=${options.'dir-beans'}"
println "ORM=${options.'dir-orm'}"
if (options.h || options == null) {
cli.usage()
System.exit(0)
}
De acuerdo con la documentación maravilloso que debería ser capaz de utilizar múltiples "_" valores para una opción cuando lo quiero ignorar el nombre de la opción corta y utilizar un nombre de la opción única . De acuerdo con la documentación maravilloso:
Another example showing long options (partial emulation of arg processing for 'curl' command line):
def cli = new CliBuilder(usage:'curl [options] <url>')
cli._(longOpt:'basic', 'Use HTTP Basic Authentication')
cli.d(longOpt:'data', args:1, argName:'data', 'HTTP POST data')
cli.G(longOpt:'get', 'Send the -d data with a HTTP GET')
cli.q('If used as the first parameter disables .curlrc')
cli._(longOpt:'url', args:1, argName:'URL', 'Set URL to work with')
Which has the following usage message:
usage: curl [options] <url>
--basic Use HTTP Basic Authentication
-d,--data <data> HTTP POST data
-G,--get Send the -d data with a HTTP GET
-q If used as the first parameter disables .curlrc
--url <URL> Set URL to work with
This example shows a common convention. When mixing short and long
nombres, los nombres cortos son a menudo uno caracteres de tamaño. Las opciones de un carácter con argumentos no requieren un espacio entre la opción y el argumento , p. Ej. -Ddebug = verdadero. El ejemplo también muestra el uso de '_' cuando no es aplicable una opción corta.
También tenga en cuenta que '_' se utilizó varias veces. Esto es compatible pero si se repite cualquier otro shortOpt o cualquier longOpt, entonces el comportamiento no está definido.
http://groovy.codehaus.org/gapi/groovy/util/CliBuilder.html
Cuando utilizo el "_" Sólo acepta el último en la lista (la última se encontró). ¿Estoy haciendo algo mal o hay una forma de solucionar este problema?
Gracias.
fyi, tu segunda excepción falla cuando pruebo este código. Tuve que agregar un '=' entre los argumentos largos en su llamada a la función de análisis: 'parse" -x param --dir-beans = beans --dir-orm = orm ".split ('')'. Supongo que los argumentos requieren el signo igual. – jmq
@jmquigley no tengo ese problema. tal vez debería haber empezado a preguntar qué versión estás usando, ya que podría ser un viejo error (estoy en 1.8) – jpertino