Folosiți „maven-shade-plugin” pentru a crea doar 1 jar executabil cu toate dependențele necesare pentru proiectul dumneavoastră Java sau Spring?

Publicat: 2016-11-16

maven-shade-plugin-cum-se-creează-javaspring-basat-executable-jar-cu-toate-dependențele-necesare

Doar creați un fișier Crunchify.jar cu toate dependențele în interiorul acestuia

Săptămâna trecută am scris un tutorial despre cum să utilizați maven-resources-plugin , maven-dependency-plugin și maven-jar-plugin pentru a genera proiectul jar executabil complet? Ca rezultat, creează / copiează toate fișierele necesare în folderul /target/Crunchify .

Before: Folosind pluginuri maven-resource, maven-dependency, maven-jar:

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

After: Folosind pluginul Maven-shade:

creați-doar-1-fișier-executabil-cu-toate-dependențele-necesare-proprietăți-și-resurse-în-el-pentru-proiectul-java-sau-prin-primavară

Să începem cum să obținem rezultatul de mai sus:

Aici, după cum vedeți, am grupat totul de la Java Project într just one file și am dat numele Crunchify.jar (cu toate fișierele în interior).

Cu câteva zile în urmă nu aveam idee cum să realizez asta, deoarece voiam să creez o runnable binary distribution of a standalone Java application folosind Maven. Cu alte cuvinte:

  1. Cum se creează un borcan executabil pe bază de primăvară cu Maven?
  2. Crearea unei distribuții binare rulabile cu Maven pentru Java + Spring + Alte dependențe
  3. Cum să construiți proiecte Java + Spring cu Maven?

În mod normal, în Maven, ne bazăm pe managementul dependenței. Un artefact conține doar clasele/resursele însuși. Maven va fi responsabil să afle toate artefactele (JAR-uri etc.) de care depinde proiectul, la compilare și pentru rulare etc.

Cu ajutorul maven -shade- plugin am reușit să realizez acest obiectiv . Oferă capacitatea de a împacheta artefactul într-un uber-jar (One major file jar) , inclusiv dependențele sale și de a umbri – adică redenumi – pachetele unora dintre dependențe.

În proiectul meu am atât de multe alte dependențe, de exemplu Spring Framework, JSON, instrumente terțe etc. Mai jos este doar un exemplu de proiect, dar fișierul meu de producție .jar a ajuns la o dimensiune de ~5.2MB big .

Un uber-jar este ceva care preia toate dependențele și extrage conținutul dependențelor și îl pune într-un singur JAR, cu clasele/resursele proiectului însuși. Având un astfel de uber-jar, este easy for execution , deoarece veți avea nevoie de un singur JAR mare în loc de tone de JAR mici pentru a rula aplicația. De asemenea, ușurează distribuția în unele cazuri.

Pentru a realiza acest lucru, trebuie să actualizați fișierul pom.xml.

Pasul 1

Aruncă o privire la fișierul complet pom.xml . În principal, ați fi interesat de eticheta <build> .

După cum puteți vedea aici, folosesc Resource Transformers în fișierul pom.xml. Agregarea classes/resources din mai multe artefacte într-un singur Crunchify JAR este simplă atâta timp cât nu există suprapunere. În caz contrar, este necesară un fel de logică pentru a îmbina resursele din mai multe JAR. Aici intervin transformatoarele de resurse.

Pasul 2

Odată ce adăugați maven-shade-plugin la fișierul pom.xml , utilizați comanda de mai jos pentru a vă construi proiectul.

Și ar trebui să vedeți un Crunchify.jar (uber-jar) creat cu all dependencies mentioned in pom.xml file interior.

Pasul 3

Accesați folderul țintă al proiectului și veți vedea fișierul Crunchify.jar creat. Folosește doar comanda

$bash> java -jar Crunchify.jar pentru a vă executa proiectul.

Ai ceva de adăugat? Adaugă-l în secțiunea de comentarii de mai jos. Bucurați-vă, să aveți o zi grozavă înainte și Happy Coding.