Créer un gros pot dans Gradle

Cet article fait partie d'une série: • Introduction à Gradle

• Fourmi vs Maven vs Gradle

• Écriture de plugins Gradle personnalisés

• Créer un Fat Jar dans Gradle (article actuel)

1. Vue d'ensemble

Dans cet article rapide, nous allons couvrir la création d'un «pot de graisse» dans Gradle.

Fondamentalement, un fat jar (également appelé uber-jar) est une archive autonome qui contient à la fois les classes et les dépendances nécessaires pour exécuter une application.

2. Configuration initiale

Commençons par un simple fichier build.gradle pour un projet Java avec deux dépendances:

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. Utilisation de la tâche Jar à partir du plug-in Java

Commençons par modifier la tâche jar à partir du plugin Java Gradle. Par défaut, cette tâche produit des fichiers JAR sans aucune dépendance.

Nous pouvons écraser ce comportement en ajoutant quelques lignes de code. Nous avons besoin de deux choses pour que cela fonctionne:

  • un attribut Main-Class dans le fichier manifeste
  • Inclure les jars de dépendances

Ajoutons quelques modifications à la tâche Gradle:

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

4. Création d'une tâche distincte

Si nous voulons laisser la tâche jar originale telle quelle, nous pouvons en créer une autre qui fera le même travail.

Le code suivant ajoutera une nouvelle tâche appelée 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. Utilisation de plugins dédiés

Nous pouvons également utiliser les plugins Gradle existants afin de créer un gros pot.

Dans cet exemple, nous utiliserons le plugin Shadow:

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

Une fois que nous avons appliqué le plugin Shadow, la tâche shadowJar sera prête à être utilisée.

6. Conclusion

Dans ce didacticiel, nous avons présenté différentes façons de créer des pots de graisse dans Gradle. Nous avons remplacé la tâche jar par défaut, créé une tâche séparée et utilisé le plugin shadow.

Quelle approche est recommandée? La réponse est - cela dépend.

Dans les projets simples, il suffit de remplacer la tâche jar par défaut ou d'en créer une nouvelle. Mais à mesure que le projet se développe, nous vous recommandons vivement d'utiliser des plugins, car ils ont déjà résolu des problèmes plus difficiles tels que des conflits avec des fichiers META-INF externes.

Comme toujours, l'implémentation complète de ce tutoriel peut être trouvée sur GitHub.

« Précédent Écriture de plugins Gradle personnalisés