Création d’un pot de graisse en grade

Créer un gros pot en degrés

1. Vue d'ensemble

Dans cet article rapide, nous aborderons la création d'un "gros pot" dans Gradle.

Fondamentalement,a fat jar (also known as uber-jar) is a self-sufficient archive which contains both classes and dependencies needed to run an application.

2. La configuration initiale

Commençons par un simple fichierbuild.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âchejar depuis le plugin Java Gradle. Par défaut, cette tâche génère 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 attributMain-Class dans le fichier manifeste

  • Inclure les dépendances

Ajoutons quelques modifications à la tâche Gradle:

jar {
    manifest {
        attributes "Main-Class": "com.example.fatjar.Application"
    }

    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

4. Créer une tâche distincte

Si nous voulons laisser la tâche jar d'origine en l'état, nous pouvons en créer une distincte qui fera le même travail.

Le code suivant ajoutera une nouvelle tâche appeléecustomFatJar:

task customFatJar(type: Jar) {
    manifest {
        attributes 'Main-Class': 'com.example.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 pour construire un gros pot.

Dans cet exemple, nous utiliserons le pluginShadow:

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âcheshadowJar sera prête à être utilisée.

6. Conclusion

Dans ce tutoriel, nous avons présenté différentes manières 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 plug-in 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 au fur et à 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éeover on GitHub.