Een vetpot maken in Gradle

Dit artikel maakt deel uit van een reeks: • Inleiding tot Gradle

• Ant vs Maven vs Gradle

• Aangepaste Gradle-plug-ins schrijven

• Een vetpot maken in Gradle (huidig ​​artikel)

1. Overzicht

In dit korte artikel behandelen we het maken van een "vetpot" in Gradle.

Eigenlijk, een fat jar (ook bekend als uber-jar) is een zelfvoorzienend archief dat zowel klassen als afhankelijkheden bevat die nodig zijn om een ​​applicatie uit te voeren.

2. Eerste installatie

Laten we beginnen met een simpele build.gradle bestand voor een Java-project met twee afhankelijkheden:

pas plug-in toe: 'java' repositories {mavenCentral ()} afhankelijkheden {compileer groep: 'org.slf4j', naam: 'slf4j-api', versie: '1.7.25' compileer groep: 'org.slf4j', naam: ' slf4j-simple ', versie:' 1.7.25 '}

3. De Jar-taak van de Java-plug-in gebruiken

Laten we beginnen met het aanpassen van het pot taak uit de Java Gradle-plug-in. Standaard produceert deze taak potten zonder enige afhankelijkheden.

We kunnen dit gedrag overschrijven door een paar regels code toe te voegen. We hebben twee dingen nodig om het te laten werken:

  • een Hoofdklasse attribuut in het manifestbestand
  • Voeg potten met afhankelijkheden toe

Laten we enkele wijzigingen aan de Gradle-taak toevoegen:

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

4. Een aparte taak maken

Als we de oorspronkelijke JAR-taak willen laten zoals deze is, kunnen we een aparte maken die dezelfde taak zal uitvoeren.

De volgende code voegt een nieuwe taak toe met de naam customFatJar:

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

5. Gebruik van speciale plug-ins

We kunnen ook bestaande Gradle-plug-ins gebruiken om een ​​fat jar te bouwen.

In dit voorbeeld gebruiken we de Shadow-plug-in:

buildscript {repositories {jcenter ()} afhankelijkheden {classpath 'com.github.jengelman.gradle.plugins: shadow: 2.0.1'}} plug-in toepassen: 'java' plug-in toepassen: 'com.github.johnrengelman.shadow'

Zodra we de Shadow-plug-in hebben toegepast, wordt het shadowJar taak is klaar voor gebruik.

6. Conclusie

In deze tutorial hebben we een paar verschillende manieren gepresenteerd om vetpotten in Gradle te maken. We hebben de standaard jar-taak overschreven, een aparte taak gemaakt en de schaduw-plug-in gebruikt.

Welke aanpak wordt aanbevolen? Het antwoord is - het hangt ervan af.

In eenvoudige projecten is het voldoende om de standaard jar-taak te negeren of een nieuwe te maken. Maar naarmate het project groeit, raden we ten zeerste aan om plug-ins te gebruiken, omdat deze al moeilijkere problemen hebben opgelost, zoals conflicten met externe META-INF-bestanden.

Zoals altijd is de volledige implementatie van deze tutorial te vinden op GitHub.

« Vorige Aangepaste Gradle-plug-ins schrijven