Qual é uma boa maneira de analisar argumentos de linha de comando em Java?
java
command-line
command-line-arguments
picocli
lindelof
fonte
fonte
How to parse java command line arguments?
. Mas ninguém realmente deseja escrever código para fazer isso, mas use uma ferramenta. Mas procura de ferramentas e os gostos não é construtiva :(Respostas:
Verifique estes:
Ou faça o seu:
Por exemplo, é assim que você usa
commons-cli
para analisar 2 argumentos de sequência:uso da linha de comando:
fonte
Dê uma olhada no JCommander mais recente .
Eu criei. É um prazer receber perguntas ou solicitações de recursos.
fonte
Eu tenho tentado manter uma lista de analisadores Java CLI .
fonte
Você deve criar seu próprio analisador de linha de comando Java ou usar uma biblioteca?
Muitos aplicativos pequenos do tipo utilitário provavelmente rolam sua própria análise de linha de comando para evitar a dependência externa adicional. picocli pode ser uma alternativa interessante.
Picocli é uma biblioteca e estrutura modernas para criar aplicativos de linha de comando poderosos, fáceis de usar e habilitados para GraalVM com facilidade. Ele vive em um arquivo de origem e, portanto, os aplicativos podem incluí-lo como fonte para evitar adicionar uma dependência.
Ele suporta cores, preenchimento automático, subcomandos e muito mais. Escrito em Java, utilizável a partir de Groovy, Kotlin, Scala, etc.
Recursos:
<command> -xvfInputFile
assim como<command> -x -v -f InputFile
)"1..*"
,"3..5"
A mensagem de ajuda de uso é fácil de personalizar com anotações (sem programação). Por exemplo:
( fonte )
Não resisti em adicionar mais uma captura de tela para mostrar que mensagens de ajuda de uso são possíveis. A ajuda de uso é o rosto do seu aplicativo, portanto, seja criativo e divirta-se!
Disclaimer: Eu criei picocli. Comentários ou perguntas muito bem-vindos.
fonte
Eu usei o JOpt e achei bastante útil: http://jopt-simple.sourceforge.net/
A primeira página também fornece uma lista de cerca de 8 bibliotecas alternativas, verifique-as e escolha a que melhor se adapta às suas necessidades.
fonte
Alguém me indicou args4j recentemente, que é baseado em anotação. Eu realmente gosto!
fonte
Esta é a biblioteca de análise de linha de comando do Google de código aberto, como parte do projeto Bazel. Pessoalmente, acho que é o melhor por aí e muito mais fácil que o Apache CLI.
https://github.com/pcj/google-options
Instalação
Bazel
Gradle
Maven
Uso
Crie uma classe que estenda
OptionsBase
e defina seu@Option
(s).Analise os argumentos e use-os.
https://github.com/pcj/google-options
fonte
myexecutable -c file.json -d 42 --outdir ./out
. E eu não vejo como você define as opções de descrição curta / longa / ... CheersDê uma olhada no projeto CLI do Commons , muitas coisas boas por aí.
fonte
Yeap.
Eu acho que você está procurando algo parecido com isto: http://commons.apache.org/cli
fonte
Eu sei que a maioria das pessoas aqui encontrará 10 milhões de razões pelas quais elas não gostam do meu jeito, mas deixa pra lá. Eu gosto de manter as coisas simples, então apenas separo a chave do valor usando um '=' e as armazeno em um HashMap como este:
Você sempre pode manter uma lista com os argumentos que espera, para ajudar o usuário caso ele se esqueça de um argumento ou use um errado ... No entanto, se você deseja muitos recursos, esta solução não é para você.
fonte
Talvez estes
Conjunto de análise de opções de linha de comando JArgs para Java - este pequeno projeto fornece um conjunto conveniente, compacto, pré-empacotado e abrangente de documentos de analisadores de opções de linha de comando para o uso de programadores Java. Inicialmente, é fornecida a análise compatível com o 'getopt' no estilo GNU.
ritopt, O Analisador de Opções Definitivas para Java - Embora vários padrões de opção de linha de comando tenham sido estabelecidos, o ritopt segue as convenções prescritas no pacote opt.
fonte
Você pode achar interessante este meta-artigo de infelicidade como ponto de partida:
http://furiouspurpose.blogspot.com/2008/07/command-line-parsing-libraries-for-java.html
fonte
Eu escrevi outro: http://argparse4j.sourceforge.net/
Argparse4j é uma biblioteca de analisador de argumentos de linha de comando para Java, baseada no argparse do Python.
fonte
Se você está familiarizado com o gnu getopt, há uma porta Java em: http://www.urbanophile.com/arenn/hacking/download.htm .
Parece haver algumas classes que fazem isso:
fonte
companhia aérea @ Github parece ser bom. Ele é baseado em anotações e está tentando emular estruturas de linha de comando do Git.
fonte
Se você já estiver usando o Spring Boot, a análise de argumentos sairá da caixa.
Se você deseja executar algo após a inicialização, implemente a
ApplicationRunner
interface:Seu
run
método será chamado depois que o contexto for iniciado com êxito.Se você precisar acessar os argumentos antes de iniciar o contexto do aplicativo, basta analisar os argumentos do aplicativo manualmente:
E, finalmente, se você precisar acessar seus argumentos em um bean, basta injetar o
ApplicationArguments
:fonte
Argparse4j é o melhor que eu encontrei. Ele imita a biblioteca argparse do Python, que é muito conveniente e poderosa.
fonte
Se você quiser algo leve (tamanho do frasco ~ 20 kb) e simples de usar, tente o analisador de argumentos . Ele pode ser usado na maioria dos casos de uso, suporta a especificação de matrizes no argumento e não depende de nenhuma outra biblioteca. Funciona para Java 1.5 ou superior. O trecho abaixo mostra um exemplo de como usá-lo:
Mais exemplos podem ser encontrados aqui
fonte
Eu não recomendaria o uso da
Apache Common CLI
biblioteca, pois não é segura para threads.Ele usa classes stateful com variáveis estáticas e métodos para realizar trabalhos internos (por exemplo
OptionBuilder
) e deve ser usado apenas em situações fortemente controladas de thread único.fonte
Como um dos comentários mencionados anteriormente ( https://github.com/pcj/google-options ) seria uma boa opção para começar.
Uma coisa que eu quero adicionar é:
1) Se você encontrar algum erro de reflexão do analisador, tente usar uma versão mais recente da goiaba. No meu caso:
2) Ao executar a linha de comando:
3) Quando precisar da ajuda de uso, digite:
fonte
Para usuários do Spring, devemos mencionar também https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/env/SimpleCommandLinePropertySource.html e seu irmão gêmeo https: //docs.spring .io / spring / docs / current / javadoc-api / org / springframework / core / env / JOptCommandLinePropertySource.html (implementação JOpt da mesma funcionalidade). A vantagem no Spring é que você pode vincular diretamente os argumentos da linha de comando aos atributos; existe um exemplo aqui https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/env/ CommandLinePropertySource.html
fonte