Stvaranje izvršnog JAR-a s ovisnostima pomoću Mavena

Stvaranje izvršnog JAR-a s ovisnostima pomoću Mavena
Stvaranje izvršnog JAR-a s ovisnostima pomoću Mavena

Pakiranje Mavenovih projekata u jedan izvršni JAR

Kada radite s Java projektima, često je potrebno zapakirati vašu aplikaciju u jednu izvršnu JAR datoteku radi lakše distribucije. Maven, moćan alat za automatizaciju izrade, omogućuje razvojnim programerima da uključe sve potrebne ovisnosti unutar ovog jednog izlaznog JAR-a.

Ovaj će vas članak voditi kroz korake potrebne za konfiguriranje vašeg Maven projekta za uključivanje svih JAR-ova ovisnosti u vaš konačni izvršni JAR. Slijedeći ove upute, pojednostavit ćete proces postavljanja i osigurati nesmetan rad vaše aplikacije u različitim okruženjima.

Naredba Opis
<plugin> Definira Maven dodatak za korištenje tijekom procesa izgradnje. Dodaci mogu izvršavati određene zadatke kao što je kompajliranje koda ili pakiranje projekta.
<groupId> Određuje identifikator grupe za Maven projekt, obično obrnuto ime domene.
<artifactId> Definira identifikator artefakta, što je naziv projekta.
<version> Označava trenutnu verziju projekta.
<build> Sadrži konfiguraciju izgradnje za projekt, uključujući dodatke i resurse.
<descriptorRef> Referenca na unaprijed definirani deskriptor za Maven Assembly Plugin za korištenje, kao što je "jar-with-dependencies".
<mainClass> Određuje glavnu klasu koja će se izvršiti kada se pokrene JAR datoteka.
<execution> Definira izvršni blok unutar dodatka, određujući zadatke koje treba izvršiti u različitim fazama izgradnje.
mvn clean package Naredba za čišćenje projekta i njegovo pakiranje u JAR datoteku, uključujući sve ovisnosti.
java -jar target/...jar Naredba za pokretanje generirane JAR datoteke, navodeći put do JAR-a.

Stvaranje i pokretanje izvršnog JAR-a s Mavenom

Gore navedene skripte pokazuju kako konfigurirati Maven projekt za pakiranje svih njegovih ovisnosti u jednu izvršnu JAR datoteku. Prva skripta je Maven pom.xml datoteku koja sadrži konfiguraciju projekta. Unutar ove datoteke, <plugin> oznaka se koristi za definiranje dodatka Maven Assembly. Ovaj je dodatak ključan za stvaranje izvršnog JAR-a koji uključuje sve ovisnosti. The <descriptorRefs> unutar konfiguracije dodatka navodi upotrebu jar-with-dependencies deskriptor, koji osigurava da su sve ovisnosti projekta pakirane u konačnu JAR datoteku. The <mainClass> oznaka unutar <manifest> odjeljak je bitan jer govori Mavenu koja klasa sadrži glavnu metodu koju treba pokrenuti kada se JAR izvrši.

The <execution> blok unutar konfiguracije dodatka mjesto je gdje se radnja događa. Određuje cilj dodatka single treba izvršiti tijekom package faza životnog ciklusa izgradnje. To je ono što pokreće stvaranje JAR datoteke sa ovisnostima. Druga skripta je jednostavna instrukcija iz naredbenog retka: mvn clean package. Ova naredba čisti projekt (uklanjajući prethodne artefakte izgradnje), kompilira izvorni kod, pokreće testove i pakira projekt u JAR datoteku. Konačna JAR datoteka bit će smještena u target imenik projekta i nazvan prema artifactId i version navedeno u pom.xml.

Stvaranje izvršne JAR datoteke s ovisnostima pomoću Mavena

Maven konfiguracijska skripta

<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>

Pokretanje naredbe Maven za pakiranje JAR-a

Upute za naredbeni redak

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

Napredne Maven tehnike za ovisnosti o pakiranju

Osim osnovne konfiguracije za stvaranje izvršnog JAR-a s Mavenom, postoje dodatne tehnike koje mogu poboljšati vaš proces izgradnje. Jedna takva tehnika uključuje korištenje shade dodatak umjesto assembly uključiti. Maven Shade Plugin nudi naprednije značajke za stvaranje uber-JAR-ova (JAR-ova s ​​uključenim ovisnostima). Omogućuje vam preimenovanje paketa kako biste izbjegli sukobe staza klasa i pruža bolje rukovanje dupliciranim klasama i resursima. Osim toga, nudi preciznu kontrolu nad tim koje su ovisnosti uključene u konačni JAR.

Drugi važan aspekt je upravljanje veličinom vaše JAR datoteke. Velike JAR datoteke mogu biti glomazne i spore za prijenos ili učitavanje. The maven-shade-plugin može pomoći u tome dopuštajući vam da isključite nepotrebne datoteke i klase, čime se smanjuje veličina konačnog JAR-a. Također možete konfigurirati dodatak za minimiziranje JAR-a uklanjanjem nebitnih informacija kao što su neiskorištene klase ili suvišni resursi. Ove napredne konfiguracije mogu biti osobito korisne pri radu na velikim projektima s brojnim ovisnostima.

Uobičajena pitanja i rješenja za Maven izvršne JAR-ove

  1. Kako mogu odrediti glavnu klasu u svom JAR-u?
  2. Možete odrediti glavnu klasu pomoću <mainClass> oznaku unutar <manifest> odjeljak konfiguracije dodatka Maven.
  3. Kako mogu isključiti određene ovisnosti iz konačnog JAR-a?
  4. Koristiti excludes oznaku unutar konfiguracije dodatka za navođenje ovisnosti koje ne bi trebale biti uključene u konačni JAR.
  5. Što je uber-JAR?
  6. Uber-JAR je JAR datoteka koja sadrži ne samo vaš kompilirani kod već i sve njegove ovisnosti.
  7. Kako mogu izbjeći sukobe staza klasa u svom JAR-u?
  8. The maven-shade-plugin omogućuje vam preimenovanje paketa unutar ovisnosti kako biste izbjegli sukobe.
  9. Kako mogu rukovati dupliciranim klasama u ovisnostima?
  10. Konfigurirajte maven-shade-plugin za upravljanje dupliciranim klasama i resursima određivanjem načina na koji bi se trebalo postupati s duplikatima u konačnom JAR-u.
  11. Mogu li uključiti samo određene datoteke iz ovisnosti?
  12. Da, možete konfigurirati maven-assembly-plugin ili maven-shade-plugin uključiti samo određene datoteke iz ovisnosti.
  13. Kako mogu pokrenuti zapakirani JAR?
  14. Koristiti java -jar naredbu nakon koje slijedi put do vaše JAR datoteke.
  15. Kako mogu provjeriti sadržaj svoje JAR datoteke?
  16. Možete koristiti jar -tf naredba za popis sadržaja JAR datoteke.
  17. Što ako je moja JAR datoteka prevelika?
  18. Koristiti maven-shade-plugin kako biste isključili nepotrebne datoteke i smanjili veličinu JAR-a.

Zaključne misli o Mavenovim izvršnim JAR-ovima

Stvaranje izvršnog JAR-a s ovisnostima pomoću Mavena pojednostavljuje proces postavljanja Java aplikacija. Ispravnim konfiguriranjem pom.xml datoteku i koristeći dodatke poput Maven Assembly Plugin ili Maven Shade Plugin, programeri mogu upakirati sve potrebne ovisnosti u jednu JAR datoteku. Ovaj pristup osigurava da aplikacija može raditi besprijekorno u različitim okruženjima, čineći distribuciju i izvođenje jednostavnim. Slijeđenje ovih koraka pomoći će vam da učinkovito upravljate ovisnostima vašeg projekta i stvorite pouzdane, izvršne JAR datoteke.