Frameworks CLI para Java: Picocli, JCommander y Spring Shell

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Frameworks CLI para Java: creando potentes aplicaciones de consola

Java sigue siendo uno de los lenguajes más populares para crear aplicaciones de servidor, pero también se escriben regularmente utilidades de consola en él. Sin embargo, el análisis manual de los argumentos de la línea de comandos a través de args[] rápidamente se convierte en un caos cuando aparecen opciones, banderas y comandos anidados. Para ayudar, existen frameworks CLI especializados. En este artículo, analizaremos tres herramientas principales: Picocli, JCommander y Spring Shell. Conocerás sus características, verás ejemplos de código y podrás elegir el más adecuado para tu proyecto.



1. Picocli — moderno y eficiente

Picocli (se pronuncia «paik-cli») es un framework ligero con dependencias mínimas. Soporta anotaciones, autocompletado en el shell, comandos anidados e incluso generación de ayuda en formato de página man. Picocli es ideal tanto para crear utilidades simples como CLI complejas de varios niveles.



Ejemplo de una calculadora básica con 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 simple")public class Calculator implements Runnable {

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

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

@Option(names = {"-o", "--operation"}, defaultValue = "+", description = "Operación: +, -, *, /") 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("Operación desconocida: " + 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); }}

Ejecución: java Calculator 10 5 -o "*" mostrará Resultado: 50.00. Picocli generará automáticamente la ayuda con --help y la versión con --version.



2. JCommander — probado por el tiempo

JCommander es una de las bibliotecas más antiguas para analizar argumentos en Java. Utiliza anotaciones, pero proporciona más control manual sobre el análisis. JCommander se elige a menudo para proyectos que requieren flexibilidad e integración con código existente.



Ejemplo de un conversor de moneda con JCommander:

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

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

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

@Parameter(names = {"--from", "-f"}, description = "De qué moneda (USD, EUR)", required = true) private String from;

@Parameter(names = {"--to", "-t"}, description = "A qué moneda", required = true) private String to;

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

public void run() { if (help) { JCommander jc = new JCommander(this); jc.usage(); return; } // Lógica simplificada de conversión 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