¿Qué biblioteca debo usar para manejar argumentos CLI para mi programa Java?

Para escribir aplicaciones de línea de comandos en Java, ¿cuál es la mejor biblioteca para analizar y administrar argumentos y parámetros?

Nota: esta pregunta es una versión actualizada de esta pregunta cerrada en Stack Overflow .

Al principio no estaba seguro de si esta pregunta estaba permitida aquí , pero lo está . Sin embargo, todavía dudo de su valor aquí cuando se vincula a una pregunta muy bien respondida sobre SO.
La razón por la que moví la pregunta aquí es porque la pregunta sigue siendo relevante, pero la pregunta sobre SO se cerró por no ser apropiada. Este es el hogar apropiado, donde la pregunta puede seguir siendo un 'vivo'.
Las preguntas cerradas siguen disponibles meta.stackexchange.com/questions/19231/…

Respuestas (3)

picocli es diferente de otras bibliotecas Java CLI:

  • Está diseñado para ser incluido en forma de fuente. Esto permite a los usuarios ejecutar aplicaciones basadas en picocli sin necesidad de que picocli sea una dependencia externa.
  • Genera ayuda de uso pulida y fácilmente personalizada, utilizando colores ANSI cuando la plataforma subyacente lo admite.
  • Autocompletado para sus aplicaciones de línea de comandos Java en plataformas compatibles

Ejemplo de mensaje de ayuda de uso:

ingrese la descripción de la imagen aquí

Vista rápida:

  • Análisis de línea de comando sin esfuerzo: solo anote campos
  • Todo fuertemente tipado: opciones de línea de comando, así como parámetros posicionales
  • soporte completo tanto para el estilo GNU como para las opciones cortas agrupadas de POSIX (por lo que se maneja <command> -xvfInputFiletan bien como <command> -x -v -f InputFile)
  • Un modelo de aridad que permite un número mínimo, máximo y variable de parámetros, por ejemplo, "1..*","3..5"
  • Subcomandos
  • Funciona con Java 5 y superior
  • Manual de usuario bien estructurado .

La ayuda de uso es la cara de su aplicación, ¡así que sea creativo y diviértase!

ingrese la descripción de la imagen aquí

Actualizar:

Picocli también se mantiene activamente. Desde la publicación original, se agregaron muchas características nuevas, por ejemplo:

  • API programática y API de anotaciones
  • Integración del contenedor de inyección de dependencia
  • Integración de JLine: delegue a Autocompletar para la implementación de Completer de su comando
  • los métodos de interfaz se pueden anotar con @Optiono @Parameters(picocli crea una implementación sintética que devuelve las opciones coincidentes)
  • los métodos de clase se pueden anotar con @Optiono @Parameters(para que pueda validar opciones y parámetros posicionales)
  • soporte para @Commandmétodos para código extra compacto
  • internacionalización con paquetes de recursos

Descargo de responsabilidad: soy el autor.

He agregado la gestión de opciones con picocli a un proyecto y fue muy fácil de integrar con mi proyecto. Parece agradable y tiene más funciones avanzadas que tengo la intención de agregar más adelante.

Recomiendo JOpt Simple . 'Intenta respetar las sintaxis de opciones de la línea de comandos de POSIX getopt() y GNU getopt_long()'. Tiene tracción comunitaria y, en particular, es la biblioteca de análisis de línea de comandos de elección para el propio OpenJDK.

A modo de comparación, aquí hay una lista relativamente actualizada (a partir de enero de 2015) de bibliotecas relacionadas que tienen el mismo propósito.

Acabo de probar la biblioteca CLI de Commons, me resultó extremadamente frustrante usarla, me cambié a JCommander y ¡no me arrepiento! Algo tan simple como aceptar opciones desconocidas era ridículamente complicado de lograr con Commons CLI. Por otro lado, es una sola línea con JCommander.
Por favor, eche un vistazo a picocli. Es fácil de usar y ofrece mucho.
jopt enlace simple está muerto. este: github.com/jopt-simple/jopt-simple parece existir, pero no se ha actualizado por un tiempo.

Mi elección va a JCommander .

A partir de octubre de 2016, tenía que comenzar un nuevo proyecto y finalmente decidió hacer argumentos de manera inteligente. Acabo de comparar Jopt-simple, JCommander, args4j.

Motivo de elección: solo JCommander y args4j tienen anotaciones, solo JOpt-simple y JCommander tienen un gran tutorial.