Oprettelse af en fed krukke i Gradle

Denne artikel er en del af en serie: • Introduktion til Gradle

• Ant vs Maven vs Gradle

• Skrivning af brugerdefinerede Gradle-plugins

• Oprettelse af en fedt krukke i gradle (nuværende artikel)

1. Oversigt

I denne hurtige artikel vil vi dække oprettelse af en "fed krukke" i Gradle.

I bund og grund, en fedtkrukke (også kendt som uber-jar) er et selvforsynende arkiv, der indeholder både klasser og afhængigheder, der er nødvendige for at køre en applikation.

2. Første opsætning

Lad os starte med en simpel build.gradle fil til et Java-projekt med to afhængigheder:

anvend plugin: 'java' repositories {mavenCentral ()} afhængigheder {kompilér gruppe: 'org.slf4j', navn: 'slf4j-api', version: '1.7.25' kompilér gruppe: 'org.slf4j', navn: ' slf4j-simple ', version:' 1.7.25 '}

3. Brug af Jar Task fra Java Plugin

Lad os starte med at ændre krukke opgave fra Java Gradle plugin. Som standard producerer denne opgave krukker uden afhængigheder.

Vi kan overskrive denne adfærd ved at tilføje et par kodelinjer. Vi har brug for to ting for at få det til at fungere:

  • -en Hovedklasse attribut i manifestfilen
  • Inkluder afhængighedskrukker

Lad os tilføje få ændringer til Gradle-opgaven:

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

4. Oprettelse af en separat opgave

Hvis vi vil lade den oprindelige krukkeopgave være, som den er, kan vi oprette en separat, der gør det samme job.

Den følgende kode tilføjer en ny opgave kaldet customFatJar:

opgave customFatJar (type: Jar) {manifest {attributter 'Main-Class': 'com.baeldung.fatjar.Application'} baseName = 'alt-i-en-jar' fra {configurations.compile.collect {it.isDirectory ( )? det: zipTree (it)}} med jar}

5. Brug af dedikerede plugins

Vi kan også bruge eksisterende Gradle-plugins til at bygge en fed krukke.

I dette eksempel bruger vi Shadow-pluginet:

buildscript {repositories {jcenter ()} afhængigheder {classpath 'com.github.jengelman.gradle.plugins: shadow: 2.0.1'}} anvend plugin: 'java' anvend plugin: 'com.github.johnrengelman.shadow'

Når vi anvender Shadow-pluginet, er shadowJar opgaven er klar til brug.

6. Konklusion

I denne vejledning præsenterede vi et par forskellige måder at skabe fede krukker på i Gradle. Vi overstyrede standard jar-opgaven, oprettede en separat opgave og brugte skyggeplugin.

Hvilken tilgang anbefales? Svaret er - det afhænger.

I enkle projekter er det nok at tilsidesætte standard jar-opgaven eller oprette en ny. Men efterhånden som projektet vokser, anbefaler vi stærkt at bruge plugins, fordi de allerede har løst sværere problemer som konflikter med eksterne META-INF-filer.

Som altid kan den fulde implementering af denne vejledning findes på GitHub.

« Tidligere skrivning Brugerdefinerede Gradle-plugins