Pakowanie projektów Maven w pojedynczy plik wykonywalny JAR
Podczas pracy z projektami w języku Java często konieczne jest spakowanie aplikacji w jeden wykonywalny plik JAR, aby ułatwić dystrybucję. Maven, potężne narzędzie do automatyzacji kompilacji, pozwala programistom uwzględnić wszystkie niezbędne zależności w jednym wyjściowym pliku JAR.
Ten artykuł poprowadzi Cię przez kroki niezbędne do skonfigurowania projektu Maven tak, aby zawierał wszystkie pliki JAR zależności w ostatecznym pliku wykonywalnym JAR. Postępując zgodnie z tymi instrukcjami, uprościsz proces wdrażania i zapewnisz płynne działanie aplikacji w różnych środowiskach.
Komenda | Opis |
---|---|
<plugin> | Definiuje wtyczkę Maven do użycia podczas procesu kompilacji. Wtyczki mogą wykonywać określone zadania, takie jak kompilacja kodu lub pakowanie projektu. |
<groupId> | Określa identyfikator grupy dla projektu Maven, zwykle jest to odwrotna nazwa domeny. |
<artifactId> | Definiuje identyfikator artefaktu, którym jest nazwa projektu. |
<version> | Wskazuje aktualną wersję projektu. |
<build> | Zawiera konfigurację kompilacji projektu, w tym wtyczki i zasoby. |
<descriptorRef> | Odwołuje się do predefiniowanego deskryptora wtyczki Maven Assembly, takiego jak „jar-with-dependents”. |
<mainClass> | Określa klasę główną, która ma zostać wykonana po uruchomieniu pliku JAR. |
<execution> | Definiuje blok wykonawczy we wtyczce, określając zadania do wykonania na różnych etapach kompilacji. |
mvn clean package | Polecenie wyczyszczenia projektu i spakowania go do pliku JAR, łącznie ze wszystkimi zależnościami. |
java -jar target/...jar | Polecenie uruchomienia wygenerowanego pliku JAR, podając ścieżkę do pliku JAR. |
Tworzenie i uruchamianie wykonywalnego pliku JAR za pomocą Mavena
Powyższe skrypty pokazują, jak skonfigurować projekt Maven tak, aby spakować wszystkie jego zależności w jeden wykonywalny plik JAR. Pierwszy skrypt to Maven pom.xml plik zawierający konfigurację projektu. W tym pliku <plugin> tag służy do definiowania wtyczki Maven Assembly. Ta wtyczka ma kluczowe znaczenie przy tworzeniu wykonywalnego pliku JAR zawierającego wszystkie zależności. The <descriptorRefs> tag w konfiguracji wtyczki określa użycie jar-with-dependencies deskryptor, który gwarantuje, że wszystkie zależności projektu zostaną spakowane w końcowym pliku JAR. The <mainClass> tag wewnątrz <manifest> sekcja jest niezbędna, ponieważ mówi Mavenowi, która klasa zawiera główną metodę do uruchomienia po wykonaniu pliku JAR.
The <execution> blok wewnątrz konfiguracji wtyczki jest miejscem, w którym dzieje się akcja. Określa, że celem wtyczki single należy wykonać w trakcie package faza cyklu życia kompilacji. To właśnie powoduje utworzenie pliku JAR z zależnościami. Drugi skrypt to prosta instrukcja wiersza poleceń: mvn clean package. To polecenie czyści projekt (usuwając artefakty poprzedniej kompilacji), kompiluje kod źródłowy, uruchamia testy i pakuje projekt do pliku JAR. Ostateczny plik JAR będzie znajdować się w folderze target katalog projektu i nazwany zgodnie z artifactId I version określone w pom.xml.
Tworzenie wykonywalnego pliku JAR z zależnościami przy użyciu Mavena
Skrypt konfiguracyjny Mavena
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.example.MainClass</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Uruchamianie polecenia Maven w celu spakowania pliku JAR
Instrukcje wiersza poleceń
mvn clean package
# This command will compile the code, run the tests, and create the JAR file
# The JAR file will include all dependencies specified in the pom.xml
# It will be located in the target directory of the project
# The final JAR file will be named my-app-1.0-SNAPSHOT-jar-with-dependencies.jar
# To run the JAR file, use the following command:
java -jar target/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar
# Ensure that the mainClass specified in the pom.xml is correct
# This will start your application with all dependencies included
Zaawansowane techniki Mavena dla zależności pakowania
Oprócz podstawowej konfiguracji tworzenia wykonywalnego pliku JAR za pomocą Mavena istnieją dodatkowe techniki, które mogą usprawnić proces kompilacji. Jedna z takich technik polega na użyciu shade wtyczka zamiast assembly podłącz. Wtyczka Maven Shade oferuje bardziej zaawansowane funkcje tworzenia plików Uber-JAR (pliki JAR z dołączonymi zależnościami). Umożliwia zmianę nazw pakietów, aby uniknąć konfliktów ścieżek klas i zapewnia lepszą obsługę zduplikowanych klas i zasobów. Dodatkowo oferuje precyzyjną kontrolę nad zależnościami zawartymi w końcowym pliku JAR.
Kolejnym ważnym aspektem jest zarządzanie rozmiarem pliku JAR. Duże pliki JAR mogą być kłopotliwe i powolne w przesyłaniu lub ładowaniu. The maven-shade-plugin może w tym pomóc, umożliwiając wykluczenie niepotrzebnych plików i klas, zmniejszając w ten sposób rozmiar końcowego pliku JAR. Możesz także skonfigurować wtyczkę tak, aby minimalizowała plik JAR poprzez usuwanie nieistotnych informacji, takich jak nieużywane klasy lub zbędne zasoby. Te zaawansowane konfiguracje mogą być szczególnie przydatne podczas pracy nad dużymi projektami z wieloma zależnościami.
Często zadawane pytania i rozwiązania dotyczące wykonywalnych plików JAR Mavena
- Jak określić klasę główną w moim pliku JAR?
- Możesz określić klasę główną za pomocą <mainClass> tag w <manifest> sekcja konfiguracji wtyczki Maven.
- Jak mogę wykluczyć określone zależności z końcowego pliku JAR?
- Użyj excludes tag w konfiguracji wtyczki, aby określić zależności, które nie powinny być uwzględniane w końcowym pliku JAR.
- Co to jest uber-JAR?
- Uber-JAR to plik JAR, który zawiera nie tylko skompilowany kod, ale także wszystkie jego zależności.
- Jak mogę uniknąć konfliktów ścieżek klas w moim pliku JAR?
- The maven-shade-plugin umożliwia zmianę nazw pakietów w ramach zależności, aby uniknąć konfliktów.
- Jak radzić sobie z duplikatami klas w zależnościach?
- Skonfiguruj maven-shade-plugin do zarządzania zduplikowanymi klasami i zasobami poprzez określenie sposobu obsługi duplikatów w końcowym pliku JAR.
- Czy mogę uwzględnić tylko określone pliki z zależności?
- Tak, możesz skonfigurować maven-assembly-plugin Lub maven-shade-plugin aby uwzględnić tylko określone pliki z zależności.
- Jak uruchomić spakowany plik JAR?
- Użyj java -jar polecenie, po którym następuje ścieżka do pliku JAR.
- Jak mogę zweryfikować zawartość mojego pliku JAR?
- Możesz skorzystać z jar -tf polecenie, aby wyświetlić zawartość pliku JAR.
- Co się stanie, jeśli mój plik JAR jest za duży?
- Użyj maven-shade-plugin aby wykluczyć niepotrzebne pliki i zminimalizować rozmiar pliku JAR.
Końcowe przemyślenia na temat wykonywalnych plików JAR Mavena
Tworzenie wykonywalnego pliku JAR z zależnościami przy użyciu Mavena upraszcza proces wdrażania aplikacji Java. Dzięki prawidłowej konfiguracji pom.xml i korzystając z wtyczek, takich jak Maven Assembly Plugin lub Maven Shade Plugin, programiści mogą spakować wszystkie niezbędne zależności w jeden plik JAR. Takie podejście zapewnia płynne działanie aplikacji w różnych środowiskach, co ułatwia dystrybucję i wykonanie. Wykonanie tych kroków pomoże Ci skutecznie zarządzać zależnościami projektu i tworzyć niezawodne, wykonywalne pliki JAR.