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

Java continua sendo uma das linguagens mais populares para criar aplicações de servidor, mas utilitários de console também são escritos nela regularmente. No entanto, a análise manual de argumentos de linha de comando via args[] rapidamente se transforma em caos quando surgem opções, flags e comandos aninhados. Frameworks CLI especializados vêm em socorro. Neste artigo, veremos três ferramentas líderes: Picocli, JCommander e Spring Shell. Você conhecerá suas características, verá exemplos de código e poderá escolher a mais adequada para o seu projeto.



1. Picocli — moderno e performático

Picocli (pronuncia-se "paik-cli") é um framework leve com dependências mínimas. Ele suporta anotações, autocompletar no shell, comandos aninhados e até mesmo geração de ajuda no formato de página man. Picocli é ideal para criar tanto utilitários simples quanto CLIs complexos de múltiplos níveis.



Exemplo de uma calculadora básica com Picocli:

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

@Command(name = "calc", mixinStandardHelpOptions = true, version = "1.0", description = "Calculadora simples")public class Calculator implements Runnable {

@Parameters(index = "0", description = "Primeiro número") private double a;

@Parameters(index = "1", description = "Segundo número") private double b;

@Option(names = {"-o", "--operation"}, defaultValue = "+", description = "Operação: +, -, *, /") private String operation;

@Override public void run() { double result = switch (operation) { case "+" -> a + b; case "-" -> a - b; case "*" -> a * b; case "/" -> a / b; default -> throw new IllegalArgumentException("Operação desconhecida: " + operation); }; System.out.printf("Resultado: %.2f%n", result); }

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

Execução: java Calculator 10 5 -o "*" exibirá Resultado: 50.00. Picocli gera automaticamente a ajuda com --help e a versão com --version.



2. JCommander — testado pelo tempo

JCommander é uma das bibliotecas mais antigas para análise de argumentos em Java. Ela usa anotações, mas oferece mais controle manual sobre o parsing. JCommander é frequentemente escolhido para projetos que exigem flexibilidade e integração com código existente.



Exemplo de um conversor de moedas com JCommander:

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

@Parameters(commandDescription = "Conversor de moedas")public class CurrencyConverter {

@Parameter(names = {"--amount", "-a"}, description = "Valor", required = true) private Double amount;

@Parameter(names = {"--from", "-f"}, description = "Moeda de origem (USD, EUR)", required = true) private String from;

@Parameter(names = {"--to", "-t"}, description = "Moeda de destino", required = true) private String to;

@Parameter(names = {"--help", "-h"}, help = true, description = "Mostrar ajuda") private boolean help;

public void run() { if (help) { JCommander jc = new JCommander(this); jc.usage(); return; } // Lógica simplificada de conversão double rate = switch (from.toUpperCase() + "_" + to.toUpperCase()) { case "USD_EUR" -> 0.92; case "EUR_USD" -> 1.09; default -> 1.0; }; System.out.printf("%.2f %s = %.2f %s%n", amount, from.toUpperCase(), amoun

Recommendations