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...
no main manifest attribute, in CursoGradle-1.0-SNAPSHOT.jar
Process finished with exit code 1
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.
jar {
manifest {
attributes "Main-Class": "org.example.Main"
}
}
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
).