1. Información general
Normalmente, cada aplicación significativa incluye uno o más archivos JAR como dependencias. Sin embargo, hay ocasiones en que un archivo JAR en sí mismo representa una aplicación independiente o una aplicación web.
Nos centraremos en el escenario de la aplicación independiente en este artículo. De ahora en adelante, nos referiremos a ella como una aplicación JAR.
En este tutorial, primero aprenderemos cómo crear una aplicación JAR. Más adelante, aprenderemos cómo ejecutar una aplicación JAR con o sin argumentos de línea de comandos .
2. Cree una aplicación JAR
Un archivo JAR puede contener una o más clases principales. Cada clase principal es el punto de entrada de una aplicación . Entonces, en teoría, un archivo JAR puede contener más de una aplicación, pero debe contener al menos una clase principal para poder ejecutarse.
Un archivo JAR puede tener un punto de entrada establecido en su archivo de manifiesto . En este caso, el archivo JAR es un archivo JAR ejecutable. La clase principal debe incluirse en ese archivo JAR.
En primer lugar, veamos un ejemplo rápido de cómo compilar nuestras clases y crear un JAR ejecutable con un archivo de manifiesto:
$ javac com/baeldung/jarArguments/*.java $ jar cfm JarExample.jar ../resources/example_manifest.txt com/baeldung/jarArguments/*.class
Un JAR no ejecutable es simplemente un archivo JAR que no tiene una Main-Class definida en el archivo de manifiesto. Como veremos más adelante, aún podemos ejecutar una clase principal contenida en el archivo JAR.
Así es como crearíamos un JAR no ejecutable sin un archivo de manifiesto:
$ jar cf JarExample2.jar com/baeldung/jarArguments/*.class
3. Argumentos de la línea de comandos de Java
Al igual que cualquier aplicación, una aplicación JAR acepta cualquier número de argumentos, incluidos cero argumentos. Todo depende de la necesidad de la aplicación.
Esto permite al usuario especificar información de configuración cuando se inicia la aplicación .
Como resultado, la aplicación puede evitar valores codificados y aún puede manejar muchos casos de uso diferentes.
Un argumento puede contener cualquier carácter alfanumérico, caracteres Unicode y posiblemente algunos caracteres especiales permitidos por el shell, por ejemplo, '@'.
Los argumentos están separados por uno o más espacios . Si un argumento necesita contener espacios, los espacios deben estar entre comillas. Las comillas simples o dobles funcionan bien.
Por lo general, para una aplicación Java típica, al invocar la aplicación, el usuario ingresa argumentos en la línea de comandos después del nombre de la clase.
Sin embargo, no siempre es el caso de las aplicaciones JAR.
Como ya hemos comentado, el punto de entrada de una clase principal de Java es el método principal. Los argumentos son todos Cadena s y se pasan al método principal como una cadena matriz.
Dicho esto, dentro de la aplicación, podemos convertir cualquier elemento de la matriz String a otros tipos de datos, como char , int , double , sus clases contenedoras u otros tipos apropiados.
4. Ejecute un archivo JAR ejecutable con argumentos
Veamos la sintaxis básica para ejecutar un archivo JAR ejecutable con argumentos:
java -jar nombre-archivo-jar [args…]
El JAR ejecutable creado anteriormente es una aplicación simple que simplemente imprime los argumentos pasados. Podemos ejecutarlo con cualquier número de argumentos. A continuación se muestra un ejemplo con dos argumentos:
$ java -jar JarExample.jar "arg 1" [email protected]
Veremos el siguiente resultado en la consola:
Hello Baeldung Reader in JarExample! There are 2 argument(s)! Argument(1):arg 1 Argument(2):[email protected]
Entonces, cuando invocamos un JAR ejecutable, no necesitamos especificar el nombre de la clase principal en la línea de comando . Simplemente agregamos nuestros argumentos después del nombre del archivo JAR. Si proporcionamos un nombre de clase después del nombre del archivo JAR ejecutable, simplemente se convierte en el primer argumento de la clase principal real.
La mayoría de las veces, una aplicación JAR es un JAR ejecutable. Un JAR ejecutable puede tener un máximo de una clase principal definida en el archivo de manifiesto.
En consecuencia, otras aplicaciones en el mismo archivo JAR ejecutable no se pueden configurar en el archivo de manifiesto, pero aún podemos ejecutarlas desde la línea de comando como lo haríamos con un JAR no ejecutable. Veremos exactamente cómo en la siguiente sección.
5. Ejecute un archivo JAR no ejecutable con argumentos
Para ejecutar una aplicación en un archivo JAR no ejecutable, tenemos que usar la opción -cp en lugar de -jar . Usaremos la opción -cp (abreviatura de classpath) para especificar el archivo JAR que contiene el archivo de clase que queremos ejecutar:
java -cp nombre-archivo-jar nombre-clase-principal [args…]
Como puede ver, en este caso, tendremos que incluir el nombre de la clase principal en la línea de comando, seguido de los argumentos .
El JAR no ejecutable creado anteriormente contiene la misma aplicación simple. Podemos ejecutarlo con cualquier argumento (incluido cero). Aquí tienes un ejemplo con dos argumentos:
$ java -cp JarExample2.jar com.baeldung.jarArguments.JarExample "arg 1" [email protected]
Y, como vimos anteriormente, veremos el siguiente resultado:
Hello Baeldung Reader in JarExample! There are 2 argument(s)! Argument(1):arg 1 Argument(2):[email protected]
6. Conclusión
En este tutorial, aprendimos dos formas de ejecutar una aplicación JAR en la línea de comandos con o sin argumentos.
También demostramos que un argumento puede contener espacios y caracteres especiales (cuando lo permite el shell).
Como siempre, el código de los ejemplos está disponible en GitHub.