Introducción
Es bastante común ejecutar aplicaciones desde la línea de comandos utilizando argumentos. Especialmente en el lado del servidor. Normalmente, no queremos que la aplicación haga lo mismo en cada ejecución: queremos configurar su comportamiento de alguna manera.
En este breve tutorial, exploraremos cómo podemos manejar los argumentos de la línea de comandos en Java.
Acceso a los argumentos de la línea de comandos en Java
Dado que el método main es el punto de entrada de una aplicación Java, la JVM pasa los argumentos de la línea de comandos a través de sus argumentos.
La forma tradicional es utilizar un array de cadenas:
public static void main(String args) { // handle arguments}
Sin embargo, Java 5 introdujo los varargs, que son arrays con piel de cordero. Por lo tanto, podemos definir nuestro main con un vararg de tipo String:
public static void main(String... args) { // handle arguments}
Son idénticos, por lo que elegir entre uno u otro depende totalmente del gusto y la preferencia personal.
El parámetro del método main contiene los argumentos de la línea de comandos en el mismo orden que pasamos en la ejecución. Si queremos acceder a cuántos argumentos obtuvimos, sólo tenemos que comprobar la longitud del array.
Por ejemplo, podemos imprimir el número de argumentos y su valor en la salida estándar:
public static void main(String args) { System.out.println("Argument count: " + args.length); for (int i = 0; i < args.length; i++) { System.out.println("Argument " + i + ": " + args); }}
Nota que en algunos lenguajes, el primer argumento será el nombre de la aplicación. En cambio, en Java, este array sólo contiene los argumentos.
Cómo pasar argumentos de línea de comandos
Ahora que tenemos una aplicación que maneja argumentos de línea de comandos, estamos deseando probarla. Vamos a ver qué opciones tenemos.
3.1. Línea de comandos
La forma más obvia es la línea de comandos. Supongamos que ya hemos compilado la clase com.baeldung.commandlinearguments.CliExample con nuestro método principal en ella.
Entonces podemos ejecutarlo con el siguiente comando:
java com.baeldung.commandlinearguments.CliExample
Se produce la siguiente salida:
Argument count: 0
Ahora, podemos pasar argumentos después del nombre de la clase:
java com.baeldung.commandlinearguments.CliExample Hello World!
Y la salida es:
Argument count: 2Argument 0: HelloArgument 1: World!
Normalmente, publicamos nuestra aplicación como un archivo jar, no como un montón de archivos .Class. Digamos, que la empaquetamos en el cli-example.jar, y ponemos com.baeldung.commandlinearguments.CliExample como clase principal.
Ahora podemos ejecutarlo sin argumentos de la siguiente manera:
java -jar cli-example.jar
O con argumentos:
java -jar cli-example.jar Hello World!Argument count: 2 Argument 0: Hello Argument 1: World!
Nótese, que Java tratará cada argumento que pasemos después del nombre de la clase o del nombre del archivo jar como los argumentos de nuestra aplicación. Por tanto, todo lo que pasemos antes son argumentos para la propia JVM.
3.2. Eclipse
Mientras trabajamos en nuestra aplicación, querremos comprobar si funciona como queremos.
En Eclipse, podemos ejecutar aplicaciones con la ayuda de configuraciones de ejecución. Por ejemplo, una configuración de ejecución define qué JVM utilizar, cuál es el punto de entrada, el classpath, etc. Y, por supuesto, podemos especificar argumentos de línea de comandos.
La forma más sencilla de crear una configuración de ejecución adecuada es hacer clic con el botón derecho del ratón sobre nuestro método principal, y luego elegir Ejecutar como > Aplicación Java en el menú contextual:
Con esto, ejecutamos instantáneamente nuestra aplicación con una configuración que respeta la configuración de nuestro proyecto.
Para proporcionar argumentos, debemos entonces editar esa configuración de ejecución. Podemos hacerlo a través de la opción de menú Ejecutar > Configuraciones de ejecución…. Aquí, debemos hacer clic en la pestaña Argumentos y rellenar el cuadro de texto Argumentos del programa:
Al pulsar Ejecutar se ejecutará la aplicación y se le pasarán los argumentos que acabamos de introducir.
3.3. IntelliJ
IntelliJ utiliza un proceso similar para ejecutar las aplicaciones. Llama a estas opciones simplemente como configuraciones.
Primero, tenemos que hacer clic con el botón derecho del ratón en el método main, y luego elegir Ejecutar ‘CliExample.main()’:
Esto ejecutará nuestro programa, pero también lo añadirá a la lista Ejecutar para su posterior configuración.
Entonces, para configurar los argumentos, debemos elegir Ejecutar > Editar configuraciones… y editar el cuadro de texto Argumentos del programa:
Después, debemos darle a Aceptar y volver a ejecutar nuestra aplicación, por ejemplo con el botón de ejecutar de la barra de herramientas.
3.4. NetBeans
NetBeans también se alinea con sus procesos de ejecución y configuración.
Primero debemos ejecutar nuestra aplicación haciendo clic con el botón derecho del ratón sobre el método principal y eligiendo Ejecutar archivo:
Al igual que antes, esto crea una configuración de ejecución y ejecuta el programa.
A continuación, tenemos que configurar los argumentos en esa configuración de ejecución. Podemos hacerlo eligiendo Ejecutar > Establecer la configuración del proyecto > Personalizar… A continuación, debemos Ejecutar a la izquierda y rellenar el campo de texto Argumentos:
Tras esto, debemos darle a Aceptar e iniciar la aplicación.
Librerías de terceros
El manejo manual de los argumentos de la línea de comandos es sencillo en escenarios simples. Sin embargo, a medida que nuestros requisitos se vuelven más y más complejos, también lo hace nuestro código. Por lo tanto, si queremos crear una aplicación con múltiples opciones de línea de comandos, sería más fácil utilizar una biblioteca de terceros.
Afortunadamente, hay una plétora de esas bibliotecas que soportan la mayoría de los casos de uso. Dos ejemplos populares son Picocli y Spring Shell.
Conclusión
Siempre es una buena idea hacer que el comportamiento de tu aplicación sea configurable. En este artículo, vimos cómo hacer eso usando argumentos de línea de comandos. Además, cubrimos varias formas de pasar esos argumentos.
Como siempre, los ejemplos están disponibles en GitHub.