Frameworks CLI para Java: visão geral e comparação das melhores ferramentas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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=3


Saí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 @Parameter com atributos names, 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

Recommendations