Frameworks CLI para Java: Picocli, JCommander e Spring Shell

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 (CLI) em Java é uma tarefa que todo desenvolvedor enfrenta. O tratamento manual de argumentos de linha de comando via main(String[] args) rapidamente se torna complicado e propenso a erros. Felizmente, no ecossistema Java existem frameworks maduros que cuidam do parsing, validação, autocompletar e geração de ajuda. Neste artigo, vamos analisar três ferramentas líderes: Picocli, JCommander e Spring Shell.



1. Picocli — moderno e performático



Picocli é um framework de tamanho mínimo (apenas 1,5 MB) que não requer dependências externas. Ele suporta anotações, autocompletar para Bash/Zsh e geração de ajuda embutida. Picocli é ideal para microsserviços e ferramentas de linha de comando.



Principais recursos:

  • Anotações @Command, @Option, @Parameters
  • Subcomandos aninhados (subcommands)
  • Parâmetros tipados (int, boolean, enum, coleções)
  • Validação automática (parâmetros obrigatórios, intervalos)
  • Saída colorida e barras de progresso
  • Compilação nativa GraalVM


Exemplo de código:

import picocli.CommandLine;import picocli.CommandLine.Command;import picocli.CommandLine.Option;import picocli.CommandLine.Parameters;

@Command(name = "greet", description = "Saudação ao usuário")public class GreetCommand implements Runnable {

@Option(names = {"-n", "--name"}, description = "Nome do usuário", required = true) private String name;

@Option(names = {"-c", "--count"}, description = "Número de repetições", defaultValue = "1") private int count;

@Parameters(index = "0", description = "Mensagem", defaultValue = "Olá") private String message;

@Override public void run() { for (int i = 0; i < count; i++) { System.out.println(message + ", " + name + "!"); } }

public static void main(String[] args) { int exitCode = new CommandLine(new GreetCommand()).execute(args); System.exit(exitCode); }}


Execução: java GreetCommand -n Mundo -c 2 "Olá" exibirá:

Olá, Mundo!Olá, Mundo!


2. JCommander — testado pelo tempo



JCommander é um dos frameworks CLI mais antigos (desde 2010), usado em projetos como Jenkins e TestNG. Ele suporta anotações, tipos complexos e internacionalização. JCommander se destaca pela simplicidade da API e excelente documentação.



Características principais:

  • Anotações @Parameter com nomes e descrições
  • Suporte a comandos aninhados via JCommander.addCommand()
  • Validação através de IParameterValidator personalizados
  • Geração de ajuda com usage()
  • Trabalho com arquivos de configuração


Exemplo de código:

import com.beust.jcommander.JCommander;import com.beust.jcommander.Parameter;import com.beust.jcommander.Parameters;

@Parameters(commandDescription = "Calculadora")public class CalculatorCommand {

@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() { double result; switch (operation) { case "add": result = a + b; break; case "sub": result = a - b; break; case "mul": result = a * b; break; case "div": result

Recommendations