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.