Usa "maven-shade-plugin" per creare solo 1 jar eseguibile con tutte le dipendenze richieste per il tuo progetto Java o Spring?

Pubblicato: 2016-11-16

maven-shade-plugin-come-creare-jar-eseguibile-basato su javaspring-con-tutte-le-dipendenze-richieste

Basta creare un file Crunchify.jar con tutte le dipendenze al suo interno

La scorsa settimana ho scritto un tutorial su come utilizzare maven-resources-plugin , maven-dependency-plugin e maven-jar-plugin per generare il tuo progetto Jar eseguibile completo? Di conseguenza crea/copia tutti i file richiesti nella cartella /target/Crunchify .

Before: utilizzo dei plug-in maven-resource, maven-dependency, maven-jar:

maven-resources-maven-dependency-maven-jar-plugin-to-build-java-project

After: utilizzando il plug-in Maven-Shade:

crea-solo-1-jar-eseguibile-con-tutte-le-dipendenze-richieste-proprietà-e-risorse-file-in-esso-per-il-tuo-progetto-java-o-primaverile

Iniziamo su come ottenere il risultato di cui sopra:

Qui come vedi, abbiamo raggruppato tutto da Java Project in just one file e abbiamo dato il nome Crunchify.jar (con tutti i file all'interno).

Pochi giorni fa non avevo idea di come ottenerlo poiché volevo creare una runnable binary distribution of a standalone Java application utilizzando Maven. In altre parole:

  1. Come creare un barattolo eseguibile basato su primavera con Maven?
  2. Creazione di una distribuzione binaria eseguibile con Maven per Java + Spring + Altre dipendenze
  3. Come creare progetti Java + Spring con Maven?

Normalmente in Maven, ci affidiamo alla gestione delle dipendenze. Un artefatto contiene solo le classi/risorse di se stesso. Maven sarà responsabile di scoprire tutti gli artefatti (JAR, ecc.) Da cui dipende il progetto, durante la compilazione e l'esecuzione, ecc.

Con l'aiuto del maven -shade- plugin sono stato in grado di raggiungere questo obiettivo . Fornisce la capacità di impacchettare l'artefatto in un uber-jar (One major file jar) , comprese le sue dipendenze e di ombreggiare, cioè rinominare, i pacchetti di alcune delle dipendenze.

Nel mio progetto ho così tante altre dipendenze, ad esempio Spring Framework, JSON, strumenti di terze parti, ecc. Di seguito è riportato solo un progetto di esempio, ma il mio file .jar di produzione ha raggiunto una dimensione di ~5.2MB big .

Un uber-jar è qualcosa che prende tutte le dipendenze, estrae il contenuto delle dipendenze e lo inserisce in un JAR, con le classi/risorse del progetto stesso. Avendo tale uber-jar, è easy for execution , perché avrai bisogno di un solo grande JAR invece di tonnellate di piccoli JAR per eseguire la tua app. In alcuni casi facilita anche la distribuzione.

Per ottenere ciò, è necessario aggiornare il file pom.xml.

Passo 1

Dai un'occhiata al file pom.xml completo. Principalmente saresti interessato al tag <build> .

Come puoi vedere qui, sto usando Resource Transformers nel file pom.xml. L'aggregazione di classes/resources da diversi artefatti in un Crunchify JAR è semplice fintanto che non vi sono sovrapposizioni. In caso contrario, è necessaria una sorta di logica per unire le risorse da più JAR. È qui che entrano in gioco i trasformatori di risorse.

Passo 2

Dopo aver aggiunto maven-shade-plugin al tuo file pom.xml , usa semplicemente il comando seguente per costruire il tuo progetto.

E dovresti vedere un Crunchify.jar (uber-jar) creato con all dependencies mentioned in pom.xml file all'interno.

Passaggio 3

Vai alla cartella di destinazione del tuo progetto e vedrai il file Crunchify.jar creato. Basta usare il comando

$bash> java -jar Crunchify.jar per eseguire il tuo progetto.

Hai qualcosa da aggiungere? Aggiungilo alla sezione commenti qui sotto. Divertiti, buona giornata e buona codifica.