Vamos a ver como compilar nuestro código en Java a un archivo JAR.
Primera compilación
Si vemos nuestro archivo Main.java
, ya tiene código de ejemplo. Vamos a probar a compilar este, a ver que ocurre. Para ello podemos, desde la terminal, ejecutar gradlew build
, o desde IntellIj, en el menú de Gradle, hacer doble click a la tarea en sí.
Captura de pantalla de una build successful en Gradle
Si todo va correctamente, veremos BUILD SUCCESSFUL
😇. Vaya bendición de mensaje. Ahora toca ejecutar el archivo. Este se encontrará en el directorio build/libs
. Vemos que tiene el nombre de CursoGradle-1.0-SNAPSHOT.jar
.
Para ejecutar podemos dar click derecho, y a ejecutar:
Captura de como ejecutar programas de Java en IntellIj
Pero no tardará mucho en salir un error...
El archivo de manifest es un componente que contiene metadatos sobre el archivo JAR. Contiene información del programa, y entre ella, la clase principal que ha de ejecutar.
Nos falta especificar en el manifest nuestra clase principal. Lo podríamos solucionar creando un archivo en resources/
, pero mejor nos complicamos la vida. ¡Vamos a solucionarlo con Gradle!
Manifest en Gradle
Para configurar el archivo Manifest desde Gradle, usaremos el bloque de configuración jar
del plugin java
. Dentro configuraremos el bloque de manifest, y los atributos de este archivo.
Si no hemos cambiado en nombre del package ni nada, este tendría que ser org.example
, y luego nuestra clase de entrada, que es Main
.
Si ahora volvemos a ejecutar la tarea build
, y ejecutamos de nuestro archivo jar
, vemos como ahora funciona correctamente.
Hello world!
Process finished with exit code 0
Formato nombre jar
Los nombres de archivos que saca Gradle están formados por tres partes
{archiveBaseName}-{archiveVersion}-{archiveClassifier}.jar
archiveBaseName
: El nombre base del archivo. Este tiende a ser el nombre de nuestro proyecto.archiveVersion
: La versión del archivo. Este ha de ser la versión de nuestro programa en el instante de hacer build.archiveClassifier
: Clasificador del archivo (es opcional). Este sirve para poder diferenciar los diferentes archivos que compila Gradle.
En los bloques de configuración, podemos usar estos nombres como nombres de variables, y cambiarlos para cada configuración. Por defecto, archiveBaseName
tendrá el nombre de nuestro proyecto (como en settings.gradle
), y archiveVersion
el de la versión de nuestro programa (puesto más arriba en build.gradle
).