Frameworks CLI para Java: criando aplicações de console poderosas
O desenvolvimento de aplicações de console complexas em Java exige não apenas lógica, mas também uma interface de linha de comando (CLI) conveniente. Analisar argumentos, processar opções e exibir ajuda — implementar essas tarefas manualmente é trabalhoso e propenso a erros. Felizmente, existem frameworks CLI maduros que automatizam esse processo. Neste artigo, vamos detalhar três ferramentas líderes: Picocli, JCommander e Spring Shell, com exemplos de código e recomendações de escolha.
1. Picocli — moderno e performático
Picocli (https://picocli.info/) é o framework CLI mais popular para Java atualmente. Sua principal vantagem é uma API minimalista baseada em anotações e suporte para Java, Kotlin, Groovy e Scala. A biblioteca não requer dependências externas e pode gerar autocompletar para Bash, Zsh e Fish.
Principais recursos do Picocli:
- Anotações
@Command,@Option,@Parameters - Geração automática de ajuda (
--help) - Comandos aninhados (subcomandos)
- Suporte a tipos de valor (int, boolean, enum, LocalDate)
- Conversores e validadores personalizados
Exemplo de aplicação simples com Picocli:
import picocli.CommandLine;import picocli.CommandLine.Command;import picocli.CommandLine.Option;import picocli.CommandLine.Parameters;
@Command(name = "greet", description = "Sauda o usuário")public class GreetApp implements Runnable {
@Option(names = {"-n", "--name"}, defaultValue = "mundo", description = "Nome para a saudação") private String name;
@Option(names = {"-c", "--count"}, defaultValue = "1", description = "Número de repetições") private int count;
@Override public void run() { for (int i = 0; i < count; i++) { System.out.println("Olá, " + name + "!"); } }
public static void main(String[] args) { int exitCode = new CommandLine(new GreetApp()).execute(args); System.exit(exitCode); }}Execução:
java GreetApp --name="Desenvolvedor Java" --count=3Saída:
Olá, Desenvolvedor Java!Olá, Desenvolvedor Java!Olá, Desenvolvedor Java!2. JCommander — o clássico testado
JCommander (https://jcommander.org/) é uma biblioteca madura com uma longa história (desde 2011). Ela também usa anotações, mas oferece uma arquitetura mais flexível para cenários complexos. O JCommander é especialmente útil para projetos que exigem controle rigoroso sobre a análise e o tratamento de erros.
Principais características do JCommander:
- Anotações
@Parametercom atributosnames,required,description - Suporte a comandos multinível via
Commands - Validador de parâmetros integrado
- Possibilidade de usar tipos arbitrários através de conversores
Exemplo com JCommander:
import com.beust.jcommander.JCommander;import com.beust.jcommander.Parameter;import com.beust.jcommander.Parameters;
@Parameters(commandDescription = "Calculadora")public class Calculator {
@Parameter(names = {"--a"}, description = "Primeiro número", required = true) private int a;
@Parameter(names = {"--b"}, description = "Segundo número", required = true) private int b;
@Parameter(names = {"--op"}, description = "Operação: add, sub, mul, div") private String operation = "add";
public void run() { int result; switch (operation) { case "add": result = a + b; break; case "sub": result = a - b; break; case "mul Também na biblioteca
Event Bus e padrão Observer em Go (Golang): implementação pub/sub
xUnit / NUnit para C# (.NET): guia completo com exemplos
Trabalhando com CSV em Swift (iOS/macOS) — bibliotecas e exemplos de código
Geração de QR Codes em PHP: biblioteca phpqrcode e guia completo
Agendador de tarefas em PHP: biblioteca cron‑expression para agendamento flexível