¿Cuál es una buena forma de analizar argumentos de línea de comandos en Java?
java
command-line
command-line-arguments
picocli
lindelof
fuente
fuente
How to parse java command line arguments?
. Pero nadie realmente quiere escribir código para hacer esto, sino usar una herramienta. Pero la búsqueda de herramientas yRespuestas:
Mira esto:
O rueda el tuyo:
Por ejemplo, así es como se utilizan
commons-cli
para analizar 2 argumentos de cadena:uso desde la línea de comando:
fuente
Echa un vistazo al JCommander más reciente .
Yo lo creé. Estoy feliz de recibir preguntas o solicitudes de funciones.
fuente
He estado tratando de mantener una lista de analizadores Java CLI .
fuente
¿Debería crear su propio analizador de línea de comandos Java o utilizar una biblioteca?
Es probable que muchas pequeñas aplicaciones similares a servicios utilicen su propio análisis de línea de comandos para evitar la dependencia externa adicional. picocli puede ser una alternativa interesante.
Picocli es una biblioteca y un marco modernos para crear aplicaciones de línea de comandos potentes, fáciles de usar y habilitadas para GraalVM con facilidad. Vive en 1 archivo fuente, por lo que las aplicaciones pueden incluirlo como fuente para evitar agregar una dependencia.
Admite colores, autocompletado, subcomandos y más. Escrito en Java, utilizable desde Groovy, Kotlin, Scala, etc.
caracteristicas:
<command> -xvfInputFile
así como<command> -x -v -f InputFile
)"1..*"
,"3..5"
El mensaje de ayuda de uso es fácil de personalizar con anotaciones (sin programación). Por ejemplo:
( fuente )
No pude resistirme a agregar una captura de pantalla más para mostrar qué mensajes de ayuda de uso son posibles. La ayuda de uso es la cara de su aplicación, ¡así que sea creativo y diviértase!
Descargo de responsabilidad: creé picocli. Comentarios o preguntas muy bienvenidos.
fuente
He usado JOpt y lo he encontrado bastante útil: http://jopt-simple.sourceforge.net/
La página principal también proporciona una lista de aproximadamente 8 bibliotecas alternativas, échales un vistazo y elige la que más se adapte a tus necesidades.
fuente
Alguien me señaló args4j últimamente, que está basado en anotaciones. ¡Me gusta mucho!
fuente
Esta es la biblioteca de análisis de línea de comandos de Google de código abierto como parte del proyecto Bazel. Personalmente, creo que es el mejor y mucho más fácil que la CLI de Apache.
https://github.com/pcj/google-options
Instalación
Bazel
Gradle
Maven
Uso
Cree una clase que amplíe
OptionsBase
y defina sus@Option
(s).Analiza los argumentos y úsalos.
https://github.com/pcj/google-options
fuente
myexecutable -c file.json -d 42 --outdir ./out
. Y no veo cómo se definen las opciones de descripción corta / larga ... SaludosEche un vistazo al proyecto de la CLI de Commons , muchas cosas buenas allí.
fuente
Yeap
Creo que estás buscando algo como esto: http://commons.apache.org/cli
fuente
Sé que la mayoría de la gente aquí encontrará 10 millones de razones por las que no les gusta mi camino, pero no importa. Me gusta mantener las cosas simples, así que solo separo la clave del valor usando un '=' y las almaceno en un HashMap como este:
Siempre puede mantener una lista con los argumentos que espera, para ayudar al usuario en caso de que haya olvidado un argumento o haya utilizado uno incorrecto ... Sin embargo, si desea demasiadas funciones, esta solución no es para usted de todos modos.
fuente
Tal vez estos
Conjunto de análisis de opciones de línea de comandos JArgs para Java : este pequeño proyecto proporciona un conjunto de analizadores de opciones de línea de comandos conveniente, compacto, preempaquetado y exhaustivamente documentado para el uso de programadores Java. Inicialmente, se proporciona un análisis compatible con 'getopt' de estilo GNU.
ritopt, el analizador de opciones definitivo para Java : aunque se han propuesto varios estándares de opciones de línea de comandos, ritopt sigue las convenciones prescritas en el paquete opt.
fuente
Puede encontrar este metaartículo de infelicidad interesante como punto de partida:
http://furiouspurpose.blogspot.com/2008/07/command-line-parsing-libraries-for-java.html
fuente
Escribí otro: http://argparse4j.sourceforge.net/
Argparse4j es una biblioteca de analizador de argumentos de línea de comandos para Java, basada en el argumento de Python.
fuente
Si está familiarizado con gnu getopt, hay un puerto Java en: http://www.urbanophile.com/arenn/hacking/download.htm .
Parece que hay algunas clases que hacen esto:
fuente
La aerolínea @ Github se ve bien. Se basa en anotaciones y está tratando de emular estructuras de línea de comandos de Git.
fuente
Si ya está utilizando Spring Boot, el análisis de argumentos sale de la caja.
Si desea ejecutar algo después del inicio, implemente la
ApplicationRunner
interfaz:Su
run
método se invocará después de que el contexto se haya iniciado correctamente.Si necesita acceder a los argumentos antes de activar el contexto de su aplicación, simplemente puede analizar los argumentos de la aplicación manualmente:
Y finalmente, si necesita acceso a sus argumentos en un bean, simplemente inyecte
ApplicationArguments
:fuente
Argparse4j es el mejor que he encontrado. Imita la biblioteca argparse de Python, que es muy conveniente y potente.
fuente
Si desea algo liviano (tamaño de jarra ~ 20 kb) y fácil de usar, puede probar el analizador de argumentos . Se puede usar en la mayoría de los casos de uso, admite la especificación de matrices en el argumento y no depende de ninguna otra biblioteca. Funciona para Java 1.5 o superior. El siguiente extracto muestra un ejemplo sobre cómo usarlo:
Más ejemplos se pueden encontrar aquí
fuente
No recomendaría usar
Apache Common CLI
biblioteca, ya que no es segura para subprocesos.Utiliza clases con estado con variables estáticas y métodos para hacer trabajo interno (por ejemplo
OptionBuilder
) y solo debe usarse en situaciones de un solo subproceso fuertemente controladas.fuente
Como uno de los comentarios mencionados anteriormente ( https://github.com/pcj/google-options ) sería una buena opción para comenzar.
Una cosa que quiero agregar es:
1) Si se encuentra con algún error de reflexión del analizador, intente utilizar una versión más reciente de la guayaba. en mi caso:
2) Al ejecutar la línea de comando:
3) Cuando necesite la ayuda de uso, simplemente escriba:
fuente
Para los usuarios de Spring, debemos mencionar también https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/env/SimpleCommandLinePropertySource.html y su hermano gemelo https: //docs.spring .io / spring / docs / current / javadoc-api / org / springframework / core / env / JOptCommandLinePropertySource.html (implementación JOpt de la misma funcionalidad). La ventaja en Spring es que puede vincular directamente los argumentos de la línea de comandos a los atributos, aquí hay un ejemplo https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/env/ CommandLinePropertySource.html
fuente