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 También en la biblioteca
Biblioteca GraphQL para TypeScript: guía completa de herramientas
Aprendizaje automático en C#: bibliotecas ML.NET y Accord.NET
Generación de informes PDF en Swift: PDFKit y UIPrintPageRenderer