Użyj „maven-shade-plugin”, aby utworzyć tylko 1 plik wykonywalny ze wszystkimi wymaganymi zależnościami dla swojego projektu Java lub Spring?

Opublikowany: 2016-11-16

maven-shade-plugin-jak-tworzyć-plik-wykonywalny-w-javaspringu-ze-wszystkimi-wymaganymi-zależnościami

Po prostu utwórz jeden plik Crunchify.jar ze wszystkimi zawartymi w nim zależnościami

W zeszłym tygodniu napisałem samouczek o tym, jak używać maven-resources-plugin , maven-dependency-plugin i maven-jar-plugin do generowania pełnego wykonywalnego projektu Jar Project? W rezultacie tworzy / kopiuje wszystkie wymagane pliki do folderu /target/Crunchify .

Before: Korzystanie z wtyczek maven-resource, maven-dependency i maven-jar:

maven-resources-maven-dependency-maven-jar-wtyczka-do-zbudowania-projektu-java

After: Korzystanie z wtyczki maven-shade:

utwórz-tylko-1-wykonywalny-słoik-ze-wszystkimi-wymaganymi-zależnościami-właściwościami-i-plikami-zasobami-w-jej-java-lub-wiosenny-projekt

Zacznijmy od tego, jak osiągnąć powyższy wynik:

Tutaj, jak widać, połączyliśmy wszystko z Java Project w just one file i nadaliśmy nazwę Crunchify.jar (ze wszystkimi plikami w środku).

Kilka dni temu nie miałem pojęcia, jak to osiągnąć, ponieważ chciałem stworzyć runnable binary distribution of a standalone Java application za pomocą Mavena. Innymi słowy:

  1. Jak za pomocą maven stworzyć wiosenny słój wykonywalny?
  2. Tworzenie działającej dystrybucji binarnej za pomocą Maven for Java + Spring + inne zależności
  3. Jak budować projekty Java + Spring za pomocą Mavena?

Zwykle w Maven polegamy na zarządzaniu zależnościami. Artefakt zawiera tylko same klasy/zasoby. Maven będzie odpowiedzialny za znalezienie wszystkich artefaktów (JARów itp.), od których projekt jest zależny, podczas kompilacji i uruchamiania itp.

Z pomocą maven -shade- plugin udało mi się osiągnąć ten cel al. Daje możliwość spakowania artefaktu w uber-jar (One major file jar) , w tym jego zależności i cieniowania – tj. zmiany nazwy – pakietów niektórych zależności.

W moim projekcie mam tak wiele innych zależności, tj. Spring Framework, JSON, narzędzia 3rd Party itp. Poniżej jest tylko przykładowy projekt, ale mój plik produkcyjny .jar wyszedł na ~5.2MB big .

uber-jar to coś, co pobiera wszystkie zależności i wyodrębnia zawartość zależności i umieszcza ją w jednym JAR, z klasami/zasobami samego projektu. Posiadanie takiego uber-jar jest easy for execution , ponieważ do uruchomienia aplikacji będziesz potrzebować tylko jednego dużego pliku JAR zamiast ton małych. W niektórych przypadkach ułatwia to również dystrybucję.

Aby to osiągnąć, musisz zaktualizować swój plik pom.xml.

Krok 1

Spójrz na kompletny plik pom.xml . Głównie interesuje Cię tag <build> .

Jak widać tutaj używam Resource Transformers w pliku pom.xml. Agregowanie classes/resources z kilku artefaktów w jeden Crunchify JAR jest proste, o ile nie nakładają się na siebie. W przeciwnym razie wymagana jest jakaś logika do scalania zasobów z kilku plików JAR. W tym miejscu wkraczają transformatory zasobów.

Krok 2

Po dodaniu maven-shade-plugin do pliku pom.xml wystarczy użyć poniższego polecenia, aby zbudować swój projekt.

Powinieneś zobaczyć jeden Crunchify.jar (uber-jar) utworzony ze all dependencies mentioned in pom.xml file .

Krok 3

Przejdź do folderu docelowego swojego projektu, a zobaczysz utworzony plik Crunchify.jar. Po prostu użyj polecenia

$bash> java -jar Crunchify.jar , aby wykonać swój projekt.

Masz coś do dodania? Dodaj go do sekcji komentarzy poniżej. Miłego dnia, miłego dnia i szczęśliwego kodowania.