Interfaces de linha de comando Java: picocli

Olá pessoal!

O próximo começo do grupo Java Developer , no qual todos continuamos nosso experimento de que o processo de aprendizado não precisa ser contínuo ("A controvérsia deve ser contínua?"). Ou seja, reformulamos um pouco e embaralhamos o programa e o dividimos em três etapas, que podem ser facilmente passadas com uma pausa entre eles. Em geral, é interessante tanto para os alunos quanto para nós, se ninguém estiver úmido; caso contrário, o programa pareceria um pouco mais complicado, embora não fosse fácil antes. Bem, um artigo tradicionalmente interessante relacionado ao nosso curso.

Vamos lá!



No site oficial, picocli é descrito como "uma poderosa interface de linha de comando pequena", que "é uma estrutura Java de arquivo único para analisar argumentos de linha de comando e criar mensagens auxiliares perfeitas e perfeitas. Com flores. " Esta publicação fornece uma breve visão geral do Picocli 0.9.7 e seu uso para analisar argumentos de linha de comando no código Java.

Como as outras bibliotecas de processamento de linha de comando Java descritas nesta série, o picocli é de código aberto . Como todo o picocli é implementado em um único arquivo Java , você pode facilmente usar o código-fonte diretamente, se desejar. O site picocli enfatiza que "a característica distintiva do picocli é que ele permite que os usuários executem aplicativos que usam o picocli sem exigir o próprio picocli como uma dependência externa: todo o código-fonte está localizado em um arquivo para incentivar os autores do aplicativo a incluí-lo no código-fonte do programa" . Se você preferir usar picocli como uma biblioteca, no Repositório Maven tem um arquivo JAR com o conjunto de arquivos compilados .class (Picocli representa um Java-arquivo, mas contém numerosos sub-classes e anotação s).

A maneira mais fácil de ter uma idéia da natureza de Picocli de arquivo único é dar uma olhada no próprio arquivo. O código fonte do CommandLine.java está disponível na página de download do Picocli . As duas capturas de tela a seguir mostram a saída do javap ao executar a classe CommandLine e ao executar uma de suas anotações internas e uma de suas classes internas.





Independentemente de estarmos compilando o CommandLine.java em nosso próprio arquivo de classe / JAR ou usando um JAR já construído do Maven, o código-fonte do aplicativo usando Picocli obviamente será o mesmo. A fase de “determinação” na análise de argumentos usando Picocli é realizada anotando os campos da instância que armazenará os valores associados aos parâmetros da linha de comandos. Isso é mostrado no snippet de código abaixo.

Estágio "Definição" de Picocli
/*     Java   picocli. */ @Command( name="Main", description="Demonstrating picocli", headerHeading="Demonstration Usage:%n%n") public class Main { @Option(names={"-v", "--verbose"}, description="Verbose output?") private boolean verbose; @Option(names={"-f", "--file"}, description="Path and name of file", required=true) private String fileName; @Option(names={"-h", "--help"}, description="Display help/usage.", help=true) boolean help; 

O exemplo de código acima demonstra que Picocli permite que você especifique vários nomes de sinalizadores (no meu exemplo, nomes de caracteres únicos com um hífen e nomes de vários caracteres com dois hífens). Este exemplo também mostra que required = true pode ser definido para os parâmetros necessários e help = true pode ser especificado para opções auxiliares , como detalhes de uso de impressão e eliminação de erros relacionados à ausência de parâmetros necessários. Observe que o Picocli 0.9.8 adiciona suporte adicional aos tipos de mensagens auxiliares mais específicas versionHelp e useHelp .

O estágio de "análise" no Picocli é realizado em CommandLine.populateCommand (T, String ...) , em que T é uma instância da classe com campos anotados por Picocli e as linhas restantes são os argumentos que precisam ser analisados. Isso é mostrado no seguinte trecho de código.
Fase de análise de Picocli

 final Main main = CommandLine.populateCommand(new Main(), arguments); 

O estágio "polling" no Picocli consiste em simplesmente acessar os campos anotados por Picocli da instância que foram passados ​​para o método CommandLine.populateCommand (T, String ...) no estágio "parsing". Um exemplo simples de uma “pesquisa” é mostrado na lista a seguir.

Fase de Levantamento Picocli

 out.println( "The provided file path and name is " + main.fileName + " and verbosity is set to " + main.verbose); 

A exibição de mensagens auxiliares ou informações de uso para o usuário quando -h ou --help é especificado na linha de comando é tão simples quanto "pesquisar" um campo anotado por Picocli para o qual help = true foi especificado para determinar se esse valor booleano foi definido ou não e, se instalado, chame um dos métodos CommandLine.usage sobrecarregados. Eu tive que usar uma das versões estáticas desse método, conforme mostrado na listagem a seguir.

Mensagens de suporte / informações de uso em Picocli

 if (main.help) { CommandLine.usage(main, out, CommandLine.Help.Ansi.AUTO); } 

As seguintes capturas de tela demonstram um aplicativo simples escrito usando picocli. A primeira captura de tela mostra o tipo de mensagem de erro e o rastreamento da pilha, se o sinalizador necessário estiver ausente. A segunda captura de tela mostra como os nomes longos e abreviados especificados nas anotações são usados. A terceira imagem mostra a função de exibir mensagens auxiliares em ação.





Um dos recursos adicionais de Picocli, que não está disponível em muitas outras bibliotecas de análise de argumentos de linha de comando Java, é o suporte à sintaxe de cores a. A primeira listagem desta postagem tinha linhas definidas nas anotações com @ | | @ sintaxe. Na captura de tela acima, que demonstra o uso de mensagens auxiliares, esses caracteres foram transmitidos como estão, sem processamento especial. No entanto, se eu executar esse código de exemplo no Cygwin, verei o que esses sinais fazem.



Na captura de tela acima, vemos que Picocli aplicou automaticamente a sintaxe da cor (amarelo e branco) às opções de mensagens auxiliares e também aplicou a sintaxe em negrito e sublinhado em áreas com a descrição de mensagens auxiliares nas quais a sintaxe @ | foi aplicada. | @.

A seguir, são apresentados os recursos adicionais do Picocli ao escolher uma estrutura ou biblioteca para ajudar a analisar os argumentos da linha de comandos em Java.

  • Picocli é um projeto open source com licença Apache 2.0.
  • Picocli não requer o download de bibliotecas ou estruturas de terceiros.
  • Todo o código-fonte Picocli está contido em um único arquivo .java, e esse código pode ser copiado e colado em seu próprio sistema de gerenciamento de configuração e compilado com o restante do código do aplicativo, o que significa que mesmo o arquivo Picocli JAR não é necessário.
  • O arquivo de origem CommandLine.java (Picocli 0.9.7) tem pouco mais de 3.700 linhas (incluindo espaços e comentários) e pesa quase 200 KB. O arquivo picocli-0.9.7.jar pesa cerca de 83 KB.
  • Picocli é oportuno e atualizado com frequência. A versão 0.9.8 foi lançada ontem (depois que escrevi a maior parte deste post).
  • Picocli possui documentação muito detalhada e é, de muitas maneiras, mais atualizada que a documentação para algumas outras bibliotecas de processamento de linha de comando Java.
  • O suporte à sintaxe de cores do Picocli é fácil de usar, e a ajuda sobre o uso da sintaxe de cores nas plataformas está documentada na seção Plataformas suportadas .
  • O uso de anotações Picocli para campos no nível da instância é semelhante ao uso de anotações em algumas outras bibliotecas de processamento de linha de comando e possui os mesmos benefícios.
  • Os principais recursos do Picocli são muito convenientes e fáceis de aprender, mas o Picocli também suporta a capacidade de configurar vários aspectos do processamento da linha de comando usando o Picocli.

As listagens nesta postagem estão totalmente disponíveis no GitHub .

Picocli é uma biblioteca suportada e atualizada para analisar argumentos de linha de comando Java. Ele contém vários novos recursos e abordagens de algumas das outras bibliotecas de processamento de linha de comando disponíveis escritas em Java, mas foram adicionados alguns recursos diferentes (como sintaxe de cores e uma biblioteca inteira encapsulada em um único arquivo de origem Java). O Picocli é bastante fácil de usar e atraente por si só, mas provavelmente se destacará entre outras bibliotecas para um desenvolvedor separado se esse desenvolvedor desejar oferecer suporte à sintaxe de cores ou à capacidade de adicionar um arquivo de código-fonte ao projeto de um desenvolvedor sem arquivos JAR adicionais ou arquivos compilados. arquivos de classe.

O FIM

Como sempre, estamos aguardando suas perguntas e comentários.

Source: https://habr.com/ru/post/pt419401/


All Articles