Creando un Fat Jar en Gradle

Este artículo es parte de una serie: • Introducción a Gradle

• Ant vs Maven vs Gradle

• Escribir complementos personalizados de Gradle

• Creando un Fat Jar en Gradle (artículo actual)

1. Información general

En este artículo rápido, cubriremos la creación de un "frasco gordo" en Gradle.

Básicamente, un fat jar (también conocido como uber-jar) es un archivo autosuficiente que contiene tanto las clases como las dependencias necesarias para ejecutar una aplicación.

2. Configuración inicial

Comencemos con un archivo build.gradle simple para un proyecto Java con dos dependencias:

apply plugin: 'java' repositories { mavenCentral() } dependencies { compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25' compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25' }

3. Uso de la tarea Jar desde el complemento de Java

Comencemos con la modificación de la tarea jar desde el complemento Java Gradle. De forma predeterminada, esta tarea produce jar sin dependencias.

Podemos sobrescribir este comportamiento agregando algunas líneas de código. Necesitamos dos cosas para que funcione:

  • un atributo de clase principal en el archivo de manifiesto
  • Incluir frascos de dependencias

Agreguemos algunas modificaciones a la tarea de Gradle:

jar { manifest { attributes "Main-Class": "com.baeldung.fatjar.Application" } from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } }

4. Creación de una tarea separada

Si queremos dejar la tarea jar original como está, podemos crear una separada que hará el mismo trabajo.

El siguiente código agregará una nueva tarea llamada customFatJar:

task customFatJar(type: Jar) { manifest { attributes 'Main-Class': 'com.baeldung.fatjar.Application' } baseName = 'all-in-one-jar' from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } with jar }

5. Uso de complementos dedicados

También podemos usar complementos de Gradle existentes para construir un frasco gordo.

En este ejemplo usaremos el complemento Shadow:

buildscript { repositories { jcenter() } dependencies { classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1' } } apply plugin: 'java' apply plugin: 'com.github.johnrengelman.shadow'

Una vez que apliquemos el complemento Shadow, la tarea shadowJar estará lista para usarse.

6. Conclusión

En este tutorial, presentamos algunas formas diferentes de crear frascos de grasa en Gradle. Anulamos la tarea jar predeterminada, creamos una tarea separada y usamos el complemento de sombra.

¿Qué enfoque se recomienda? La respuesta es, depende.

En proyectos simples, basta con anular la tarea jar predeterminada o crear una nueva. Pero a medida que el proyecto crece, recomendamos encarecidamente usar complementos, porque ya han resuelto problemas más difíciles como conflictos con archivos META-INF externos.

Como siempre, la implementación completa de este tutorial se puede encontrar en GitHub.

« Escritura anterior de complementos personalizados de Gradle