Hogyan készítsünk futtatható JAR-ot Maven-lel

1. Bemutatkozás

Ebben a rövid cikkben arra fogunk koncentrálni csomagoljon egy Maven-projektet egy futtatható Jar fájlba.

Általában a befőttes üveg fájlt, egyszerűen szeretnénk végrehajtani, az IDE használata nélkül; ebből a célból megvitatjuk a konfigurációt és az előnyöket / hátrányokat, amelyek mindegyik megközelítésnek a futtatható fájl létrehozásához való alkalmazására vonatkoznak.

2. Konfiguráció

Futtatható fájl létrehozása érdekében befőttes üveg, nincs szükségünk további függőségekre. Csak létre kell hoznunk a Maven Java projektet, és rendelkeznünk kell legalább egy osztállyal a fő(…) módszer.

Példánkban létrehoztuk a Java osztályt ExecutableMavenJar.

Arra is meg kell győződnünk, hogy a mi pom.xml a következő elemeket tartalmazza:

4.0.0 com.baeldung core-java 0.1.0-SNAPSHOT tégely

A legfontosabb szempont itt a típus - egy futtatható fájl létrehozása befőttes üveg, még egyszer ellenőrizze, hogy a konfiguráció a befőttes üveg típus.

Most elkezdhetjük használni a különféle megoldásokat.

2.1. Kézi konfigurálás

Kezdjük egy kézi megközelítéssel - a maven-dependency-plugin.

Először az összes szükséges függőséget átmásoljuk a megadott mappába:

 org.apache.maven.plugins maven-dependency-plugin copy-dependencies Prepar-pack copy-dependencies $ {project.build.directory} / libs 

Két fontos szempontot kell észrevenni. Először meghatározzuk a célt másolás-függőségek, amely megmondja Mavennek, hogy másolja ezeket a függőségeket a megadottakba kimeneti könyvtár.

Esetünkben létrehozunk egy nevű mappát libs, a projekt build könyvtárában (ami általában a cél mappa).

A második lépésben futtatható és osztálypálya-tudattal fogunk létrehozni befőttes üveg, az első lépésben másolt függőségek hivatkozásával:

 org.apache.maven.plugins maven-jar-plugin true libs / com.baeldung.executable.ExecutableMavenJar 

A fent említettek legfontosabb része a nyilvánvaló konfiguráció. Hozzáadunk egy osztályútvonalat, az összes függőséggel (mappa libs /), és adja meg a főosztályra vonatkozó információkat.

Felhívjuk figyelmét, hogy meg kell adnunk az osztály teljes nevű nevét, ami azt jelenti, hogy tartalmazza a csomag nevét is.

Ennek a megközelítésnek az előnyei és hátrányai:

  • profik - átlátható folyamat, ahol megadhatjuk az egyes lépéseket
  • hátrányok - kézi, a függőségek véglegesek befőttes üveg, ami azt jelenti, hogy a futtatható befőttes üveg csak akkor fut, ha a libs mappa hozzáférhető és látható lesz a befőttes üveg

2.2. Apache Maven Assembly plugin

Az Apache Maven Assembly plugin lehetővé teszi a felhasználók számára, hogy a projekt kimenetét annak függőségeivel, moduljaival, helydokumentációival és más fájljaival egyetlen, futtatható csomagba összesítsék.

Az assembly plugin fő célja a egyetlen cél - az összes összeállítás létrehozására használják (az összes többi cél elavult, és egy későbbi kiadásban eltávolításra kerül).

Vessünk egy pillantást a pom.xml:

 org.apache.maven.plugins maven-assembly-plugin csomag egyetlen com.baeldung.executable.ExecutableMavenJar jar-with-dependencies 

A manuális megközelítéshez hasonlóan nekünk is meg kell adnunk az információkat a fő osztályról; a különbség az, hogy a Maven Assembly beépülő modul automatikusan átmásolja az összes szükséges függőséget a befőttes üveg fájl.

Ban,-ben descriptorRefs a konfigurációs kód egy részét megadtuk a nevet, amelyet hozzáadunk a projekt nevéhez.

A példánkban szereplő kimenet neve: mag-java-jar-függőségekkel.jar.

  • profik - függőségek a befőttes üveg fájl, csak egy fájl
  • hátrányok - a műtárgy csomagolásának alapvető ellenőrzése, például nincs osztály-áthelyezési támogatás

2.3. Apache Maven Shade beépülő modul

Az Apache Maven Shade Plugin lehetővé teszi a műtárgy csomagolását egy uber-jar, amely a projekt futtatásához szükséges összes függőségből áll. Sőt, támogatja az árnyékolást - vagyis átnevezi - egyes függőségek csomagjait.

Vessünk egy pillantást a konfigurációra:

 org.apache.maven.plugins maven-shadow-plugin shad true com.baeldung.executable.ExecutableMavenJar 

Ennek a konfigurációnak három fő része van:

Első, jelöli az összes függőséget, amelyeket be kell csomagolni a befőttes üveg.

Másodszor meg kell adnunk a transzformátor megvalósítását; példánkban a szokásosat használtuk.

Végül meg kell adnunk alkalmazásunk fő osztályát.

A kimeneti fájl neve lesz core-java-0.1.0-SNAPSHOT-shaded.jar, hol core-java a projektünk neve, amelyet a pillanatkép verzió és a beépülő modul neve követ.

  • profik - függőségek a befőttes üveg fájl, a műtárgy csomagolásának fejlett ellenőrzése árnyékolással és osztály áthelyezéssel
  • hátrányok - összetett konfiguráció (különösen, ha fejlett funkciókat akarunk használni)

2.4. Egy Jar Maven bővítmény

Egy másik lehetőség a futtatható fájl létrehozására befőttes üveg a One Jar projekt.

Ez biztosítja az egyéni classloader alkalmazást, amely tudja, hogyan lehet osztályokat és erőforrásokat betölteni az archívumban lévő üvegekből, ahelyett, hogy onnan kellene üvegek a fájlrendszerben.

Vessünk egy pillantást a konfigurációra:

 com.jolira onejar-maven-plugin org.baeldung.executable. ExecutableMavenJar true $ {project.build.finalName}. $ {Project.packaging} egy üveg 

Amint az a konfigurációban látható, meg kell adnunk a fő osztályt, és a használatával csatolnunk kell az összes építendő függőséget attachToBuild= igaz.

Meg kell adnunk a kimeneti fájlnevet is. Sőt, Maven számára az a cél egy üveg. Felhívjuk figyelmét, hogy a One Jar egy kereskedelmi megoldás, amely függőséget teremt üvegek futás közben nem bővült a fájlrendszerbe.

  • profik - tiszta delegációs modell, lehetővé teszi, hogy az osztályok a One Jar legfelső szintjén legyenek, támogatja a külsőt üvegek és támogatni tudja a natív könyvtárakat
  • hátrányok - 2012 óta nem támogatott aktívan

2.5. Tavaszi Boot Maven beépülő modul

Végül az utolsó megoldás, amelyet megnézünk, a Spring Boot Maven beépülő modul.

Ez lehetővé teszi a futtatható fájlok csomagolását befőttes üveg vagy háború archiválja és futtasson egy alkalmazást „helyben”.

Használatához legalább a Maven 3.2-es verzióját kell használnunk. A részletes leírás itt érhető el.

Vessünk egy pillantást a konfigurációra:

 org.springframework.boot spring-boot-maven-plugin repackage spring-boot com.baeldung.executable.ExecutableMavenJar 

Két különbség van a Spring plugin és a többi között. Először a végrehajtás célját hívják meg újracsomagolás, és az osztályozót megnevezik rugós csizma.

Felhívjuk figyelmét, hogy a plugin használatához nincs szükségünk Spring Boot alkalmazásra.

  • profik - függőségek a befőttes üveg fájlt futtathatja minden elérhető helyen, a műtárgy csomagolásának fejlett vezérlésével, kizárva a függőségeket a befőttes üveg dosszié stb., csomagolása háború fájlokat is
  • hátrányok - felveszi a potenciálisan felesleges tavaszi és tavaszi csomagtartóval kapcsolatos osztályokat

2.6. Webalkalmazás futtatható Tomcattal

Az utolsó részben egy önálló webalkalmazás témájával szeretnénk foglalkozni, amely egy j-be van csomagolvaar fájl. Ehhez különféle plugint kell használnunk, amelyet futtatható jar fájlok létrehozására terveztek:

 org.apache.tomcat.maven tomcat7-maven-plugin 2.0 tomcat-run exec-only-package / false webapp.jar utf-8 

A cél beállítása csak exec-háború, pálya a szerveren belül van megadva konfiguráció tag, további tulajdonságokkal, pl finalName, karakterkészlet stb. Egy j építéséhezar, fuss ember csomag, ami létrehozást eredményez webapp.jar a te cél Könyvtár. Futni

Az alkalmazás futtatásához egyszerűen írja be ezt a konzoljára: java -jar target / webapp.jar és próbálja meg kipróbálni a helyi gazda: 8080/ egy böngészőben.

  • profik - egy fájl, könnyen telepíthető és futtatható
  • hátrányok - a fájl mérete sokkal nagyobb, a Tomcat beágyazott disztribúciójának csomagolása miattar fájl

Felhívjuk figyelmét, hogy ez a plugin legújabb verziója, amely támogatja a Tomcat7 szervert. A hibák elkerülése érdekében ellenőrizze, hogy fennáll-e a Servlet-függősége hatálya beállítva biztosítani, különben konfliktus lesz a futási idő a végrehajtható befőttes üveg:

 javax.servlet javax.servlet-api biztosított 

3. Következtetés

Ebben a cikkben a futtatható fájl létrehozásának számos módját ismertettük befőttes üveg különféle Maven bővítményekkel.

A bemutató teljes megvalósítása megtalálható ebben a (futtatható jar) és ebben (futtatható háború) Github projektekben.

Hogyan kell tesztelni? Annak érdekében, hogy a projekt futtatható fájlba álljon össze befőttes üveg, kérlek futtasd Maven-et mvn tiszta csomag parancs.

Remélhetőleg ez a cikk további betekintést nyújt a témába, és az igényeitől függően megtalálja a preferált megközelítést.

Egy gyors utolsó megjegyzés: győződjön meg arról, hogy a csomagban lévő üvegek licencei nem tiltják az ilyen jellegű műveleteket. Általában ez nem így lesz, de érdemes megfontolni.