2011-10-12 6 views
7

Sé que esta pregunta se ha formulado muchas veces aquí y en otras partes antes, ya que estoy buscando la respuesta. Sin embargo, todavía me desconcierta por qué la biblioteca del analizador de línea de comandos no proporciona este escenario de uso común, donde tengo un grupo de subcomandos, cada subcomando tiene su propio conjunto de argumentos requeridos y opcionales. Construcciones similares se pueden encontrar en git/svn, aunque en su caso, el comando del subcomando es un programa independiente si no me equivoco.Analizador de línea de comandos y falta de subcomando y agrupamiento?

En resumen, lo que estoy buscando es una manera fácil de:

top_command subcmd_A [ command A's options ....] 
top_command subcmd_B [ command B's options ....] 
... 

En el mundo de java, dos bibliotecas frecuentemente referidos son Apache comando de la CLI y JSAP. No veo que ninguno de los dos tenga esto en mente, aunque es probable que puedas ajustar y personalizar mucho para que encaje ... pero el flujo básico de definir una opción, registrar ... luego, al final, analizarlos todos no. Si se considera el caso con diferentes subcomandos, la validación y el analizador deben comportarse de forma diferente.

Quizás la sabiduría común aquí es que esto también es específico de la aplicación y debe dejarse en manos de la aplicación. Una forma en que puedo pensar es definir una clase BaseCommand, y cada subcomando la amplía y se registra ... como una forma de dividirla para una administración fácil. Si cualquier marco maduro puede hacer esto, agradecería cualquier apuntador aquí.

Podría estar equivocado acerca de mi comprensión de la capacidad del analizador actual, sin embargo, cualquier idea es muy apreciada.

Oliver

Respuesta

6

Hola sólo echar un vistazo a lo que exactamente jcommander soporta el escenario descrito. Mencionó Commons CLI, que es cierto en las versiones 1.X, pero existe un desarrollo para CLI2 que también lo admite, pero lamentablemente este lanzamiento nunca se ha publicado.

+0

No sé cómo eché de menos esta biblioteca, pero parece interesante. Gracias. – Oliver

0

Eche un vistazo a cli-parsec. Tiene (entre otras cosas) exactamente lo que creo que quiere :-) https://github.com/dr1fter/cli-parsec

Cuenta con anidamiento arbitrario de subcomandos (los subcomandos pueden tener subcomandos, etc.). Cada subcomando puede definir opciones. Un ejemplo sencillo se da aquí (dos subcomandos con opciones individuales): https://github.com/dr1fter/cli-parsec/wiki/Example

Maven fragmento:

<dependency> 
    <groupId>de.dr1fter</groupId> 
    <artifactId>de.dr1fter.cli-parsec> 
    <version>0.2.1</version> 
</dependency> 
+0

Según el dominio/URL de su (s) enlace (es) es el mismo que su nombre de usuario o que lo contiene, parece que se ha vinculado a su propio sitio. Si lo hace, debe revelar que es su sitio. Si no revela que es su propio sitio, a menudo se considera correo no deseado. Ver: [** ¿Qué significa "buena" autopromoción? **] (// meta.stackexchange.com/q/182212) y [Cómo no ser un spammer] (http://stackoverflow.com/help/promotion) – Makyen

1

picocli apoya subcomandos anidados a profundidad arbitraria.

El comando principal define opciones globales, cada nivel siguiente de comandos anidados puede agregar opciones que solo se aplican a ese nivel.

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 le puede interesar su uso ayuda con los 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.

enter image description here

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

enter image description here

  • basadas en anotación
  • subcomandos de estilo git
  • anidados sub-subcomandos
  • parámetros de opción inflexible de tipos
  • inflexible parámetros posicionales
  • conversión de tipo adaptable
  • Opciones de valores múltiples
  • modelo intuitivo para el número de argumentos un campo consume
  • API fluida
  • agrupado POSIX de estilo opciones cortas
  • opciones largas
  • estilo GNU
  • permite a cualquier opción de prefijo
  • colores ANSI en ayuda de uso
  • ayuda de uso personalizable
  • archivo de origen único: incluir como fuente para mantener su aplicación un solo contenedor
Cuestiones relacionadas