Analizador de línea de comandos de Java con subcomandos que tienen opciones similares

Desarrollamos una aplicación Java Cli, que tiene subcomandos con opciones similares. Es como svn:

svn commit -m messsage --username ARG --password ARG
svn checkout -r HEAD --username ARG --password ARG

Quiero decir que cada subcomando tiene argumentos especiales, y también tenemos argumentos globales, y tenemos algunos argumentos que son relevantes para algunos subcomandos, pero no para todos.

¿Qué analizador de argumentos de línea de comando admite esos requisitos?

gracias.

Considere editar su pregunta para agregar más detalles. Eliminar el ejemplo de svn ayudaría, ya que parece que su pregunta no tiene relevancia para SVN y solo confunde las cosas. Considere agregar un ejemplo del mundo real de cómo debería verse su línea de comando.

Respuestas (2)

picocli admite subcomandos anidados a una profundidad arbitraria.

CommandLine commandLine = new CommandLine(new MainCommand())
        .addSubcommand("cmd1", new ChildCommand1()) // 1st level
        .addSubcommand("cmd2", new ChildCommand2())
        .addSubcommand("cmd3", new CommandLine(new ChildCommand3()) // 2nd level
                .addSubcommand("cmd3sub1", new GrandChild3Command1())
                .addSubcommand("cmd3sub2", new GrandChild3Command2())
                .addSubcommand("cmd3sub3", new CommandLine(new GrandChild3Command3()) // 3rd
                        .addSubcommand("cmd3sub3sub1", new GreatGrandChild3Command3_1())
                        .addSubcommand("cmd3sub3sub2", new GreatGrandChild3Command3_2())
                                // etc
                )
        );

También te puede interesar su ayuda de uso con estilos y colores ANSI.

Tenga en cuenta que la ayuda de uso enumera los subcomandos registrados además de las opciones y los parámetros posicionales.

ingrese la descripción de la imagen aquí

La ayuda de uso se puede personalizar fácilmente con anotaciones.

ingrese la descripción de la imagen aquí

  • basado en anotaciones
  • subcomandos de estilo git
  • sub-subcomandos anidados
  • parámetros de opción fuertemente tipados
  • parámetros posicionales fuertemente tipados
  • conversión de tipo personalizable
  • opciones multivalor
  • modelo intuitivo de cuántos argumentos consume un campo
  • permite cualquier prefijo de opción
  • API fluida
  • Opciones cortas agrupadas al estilo POSIX
  • Opciones largas de estilo GNU
  • Colores ANSI en la ayuda de uso
  • ayuda de uso personalizable
  • archivo fuente único: incluir como fuente para mantener su aplicación en un solo contenedor

¿Qué analizador de argumentos de línea de comandos admite estos requisitos?

De la información limitada en su pregunta, lo siguiente parece coincidir con sus necesidades.


JOpt Simple

JOpt Simple es una biblioteca de Java para analizar las opciones de la línea de comandos, como las que podría pasar a una invocación de javac.

En aras de luchar por la simplicidad, JOpt Simple intenta respetar las sintaxis de opciones de línea de comandos de POSIX getopt() y GNU getopt_long() . También tiene como objetivo hacer que la configuración del analizador de opciones y la recuperación de opciones y sus argumentos sean simples y expresivos, sin ser demasiado inteligente.

La página web de JOpt Simple también enumera una serie de otros analizadores de línea de comandos de Java que también pueden ser adecuados si JOpt Simple no es lo suficientemente sofisticado para usted:

Aquí hay algunas bibliotecas que realizan las mismas funciones que JOpt Simple:

JArgs
Jakarta Commons CLI
TE-Code has a command line parsing library.
argparser
Java port of GNU getopt
Args4J
JSAP
CLAJR
CmdLn
JewelCli
JCommando
parse-cmd
JCommander
plume-lib Options

El sitio web contiene enlaces para lo anterior si desea investigarlos más a fondo.

Fuente JOpt Simple


CLI de Apache Commons

La biblioteca CLI de Apache Commons proporciona una API para analizar las opciones de la línea de comandos que se pasan a los programas. También puede imprimir mensajes de ayuda que detallan las opciones disponibles para una herramienta de línea de comandos.

Commons CLI admite diferentes tipos de opciones:

  • Opciones similares a POSIX (es decir, tar -zxvf foo.tar.gz)
  • GNU como opciones largas (es decir, du --human-readable --max-depth=1)
  • Propiedades similares a Java (es decir, java -Djava.awt.headless=true -Djava.net.useSystemProxies=true Foo)
  • Opciones cortas con valor adjunto (es decir, gcc -O2 foo.c)
  • opciones largas con un solo guión (es decir, ant -projecthelp)

Un mensaje de ayuda típico que muestra la CLI de Commons tiene este aspecto:

usage: ls
 -A,--almost-all          do not list implied . and ..
 -a,--all                 do not hide entries starting with .
 -B,--ignore-backups      do not list implied entried ending with ~
 -b,--escape              print octal escapes for nongraphic characters
    --block-size <SIZE>   use SIZE-byte blocks
 -c                       with -lt: sort by, and show, ctime (time of last
                          modification of file status information) with
                          -l:show ctime and sort by name otherwise: sort
                          by ctime
 -C                       list entries by columns

Fuente CLI de Apache Commons