Kako stvoriti izvršni JAR s Mavenom

1. Uvod

U ovom ćemo se kratkom članku usredotočiti na pakiranje projekta Maven u izvršnu datoteku Jar.

Obično, prilikom stvaranja a staklenka datoteku, želimo je lako izvršiti, bez upotrebe IDE-a; u tu svrhu razmotrit ćemo konfiguraciju i prednosti / nedostatke korištenja svakog od ovih pristupa za stvaranje izvršne datoteke.

2. Konfiguracija

Da bi se stvorila izvršna datoteka staklenka, ne trebaju nam nikakve dodatne ovisnosti. Samo trebamo stvoriti Maven Java projekt i imati barem jedan razred s glavni(…) metoda.

U našem primjeru stvorili smo Java klasu nazvanu IzvršniMavenJar.

Također se moramo pobrinuti da naš pom.xml sadrži sljedeće elemente:

4.0.0 com.baeldung core-java 0.1.0-SNAPSHOT jar

Ovdje je najvažniji aspekt vrsta - za stvaranje izvršne datoteke staklenka, dvaput provjerite koristi li konfiguracija staklenka tip.

Sada možemo početi koristiti različita rješenja.

2.1. Ručna konfiguracija

Počnimo s ručnim pristupom - uz pomoć dodatak za maven-dependency.

Prvo ćemo kopirati sve potrebne ovisnosti u mapu koju ćemo odrediti:

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

Dva su važna aspekta koja treba primijetiti. Prvo odredimo cilj ovisnosti o kopiji, koji govori Mavenu da kopira ove ovisnosti u navedene outputDirectory.

U našem ćemo slučaju stvoriti mapu s imenom udovi, unutar direktorija za izgradnju projekta (koji je obično cilj mapa).

U drugom koraku stvorit ćemo izvršnu datoteku i svjesni puta klase staklenka, s vezom do ovisnosti kopiranim u prvom koraku:

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

Najvažniji dio gore spomenutog je očitovati konfiguracija. Dodamo put predavanja sa svim ovisnostima (mapa usne /) i pružiti informacije o glavnoj klasi.

Napominjemo da trebamo pružiti potpuno kvalificirane imenovane klase, što znači da će sadržavati naziv paketa.

Prednosti i nedostaci ovog pristupa su:

  • profesionalci - transparentan postupak, gdje možemo odrediti svaki korak
  • kontra - priručnik, ovisnosti su izvan konačne staklenka, što znači da je vaša izvršna datoteka staklenka pokrenut će se samo ako udovi mapa bit će dostupna i vidljiva za staklenka

2.2. Dodatak za sklop Apache Maven

Dodatak Apache Maven Assembly omogućuje korisnicima da agregiraju izlazne podatke projekta, zajedno s njegovim ovisnostima, modulima, dokumentacijom web mjesta i ostalim datotekama, u jedan paket koji se može pokrenuti.

Glavni cilj dodatka za montažu je singl Cilj - koristi se za stvaranje svih sklopova (svi ostali ciljevi su zastarjeli i uklonit će se u budućem izdanju).

Pogledajmo konfiguraciju u pom.xml:

 org.apache.maven.plugins maven-assembly-plugin paket jedan com.baeldung.executable.ExecutableMavenJar jar-with-dependencies 

Slično ručnom pristupu, moramo pružiti informacije o glavnoj klasi; razlika je u tome što će dodatak Maven Assembly automatski kopirati sve potrebne ovisnosti u staklenka datoteka.

U descriptorRefs dio konfiguracijskog koda, naveli smo ime koje će biti dodano nazivu projekta.

Izlaz u našem primjeru imenovat će se kao core-java-jar-sa-ovisnostima.jar.

  • profesionalci - ovisnosti unutar staklenka datoteka, samo jedna datoteka
  • kontra - osnovna kontrola pakiranja vašeg artefakta, na primjer, nema podrške za preseljenje klase

2.3. Dodatak za sjene Apache Maven

Dodatak Apache Maven Shade pruža mogućnost pakiranja artefakta u uber-jar, koji se sastoji od svih ovisnosti potrebnih za izvođenje projekta. Štoviše, podržava zasjenjivanje - tj. Preimenovanje - paketa nekih ovisnosti.

Pogledajmo konfiguraciju:

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

Tri su glavna dijela ove konfiguracije:

Prvi, označava sve ovisnosti koje treba upakirati u staklenka.

Drugo, moramo navesti izvedbu transformatora; koristili smo standardni u našem primjeru.

Na kraju, moramo navesti glavnu klasu naše aplikacije.

Izlazna datoteka bit će imenovana core-java-0.1.0-SNAPSHOT-zasjenjen.jar, gdje jezgra-java je naziv našeg projekta, a slijedi verzija snimke i naziv dodatka.

  • profesionalci - ovisnosti unutar staklenka datoteka, napredna kontrola pakiranja vašeg artefakta, sa sjenčanjem i premještanjem klase
  • kontra - složena konfiguracija (pogotovo ako želimo koristiti napredne značajke)

2.4. Jedan dodatak za Jar Maven

Druga mogućnost za stvaranje izvršne datoteke staklenka je projekt One Jar.

Ovo pruža prilagođeni učitelj učitelja koji zna učiti klase i resurse iz staklenki unutar arhive, umjesto iz staklenke u datotečnom sustavu.

Pogledajmo konfiguraciju:

 com.jolira onejar-maven-plugin org.baeldung.izvršno. ExecutableMavenJar true $ {project.build.finalName}. $ {Project.packaging} jedna jar 

Kao što je prikazano u konfiguraciji, trebamo navesti glavnu klasu i priložiti sve ovisnosti za izgradnju, pomoću attachToBuild= istinito.

Također, trebali bismo navesti ime izlazne datoteke. Štoviše, cilj Mavena je jedna tegla. Imajte na umu da je One Jar komercijalno rješenje koje će dovesti do ovisnosti staklenke nije proširen u datotečni sustav za vrijeme izvođenja.

  • profesionalci - čisti model delegiranja, omogućuje da razredi budu na najvišoj razini One Jar-a, podržava eksterno staklenke i može podržavati matične knjižnice
  • kontra - nije aktivno podržana od 2012. godine

2.5. Dodatak Spring Boot Maven

Konačno, posljednje rješenje koje ćemo razmotriti je dodatak Spring Boot Maven.

To omogućuje pakiranje izvršne datoteke staklenka ili rat arhiva i pokrenite aplikaciju "na mjestu".

Za njegovu upotrebu moramo koristiti barem Maven verziju 3.2. Detaljan opis dostupan je ovdje.

Pogledajmo konfiguraciju:

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

Dvije su razlike između dodatka Spring i ostalih. Prvo se poziva cilj izvršenja prepakiranje, a klasifikator je imenovan opruga-čizma.

Imajte na umu da za korištenje ovog dodatka ne trebamo imati aplikaciju Spring Boot.

  • profesionalci - ovisnosti unutar a staklenka datoteku, možete je pokrenuti na svakom pristupačnom mjestu, naprednom kontrolom pakiranja vašeg artefakta, isključujući ovisnosti iz datoteke staklenka turpija itd., pakiranje rat datoteke također
  • kontra - dodaje potencijalno nepotrebne satove vezane uz Spring i Spring Boot

2.6. Web aplikacija s izvršnim Tomcatom

U posljednjem dijelu želimo pokriti temu postojanja samostalne web aplikacije koja je upakirana u jar datoteka. Da bismo to učinili, trebamo upotrijebiti drugačiji dodatak dizajniran za stvaranje izvršnih jar datoteka:

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

The cilj postavljeno je kao exec-samo za rat, staza na vaš poslužitelj naveden je unutra konfiguracija oznaka, s dodatnim svojstvima, poput finalName, charset itd. Za izgradnju jar, trčanje čovjekov paket, što će rezultirati stvaranjem webapp.jar u vašem cilj imenik. Trčati

Da biste pokrenuli aplikaciju, samo napišite ovo u svoju konzolu: java -jar target / webapp.jar i pokušajte ga testirati navodeći lokalnihost: 8080/ u pregledniku.

  • profesionalci - imati jednu datoteku, jednostavnu za postavljanje i pokretanje
  • kontra - veličina datoteke je puno veća zbog pakiranja ugrađene distribucije Tomcat unutar war datoteka

Napominjemo da je ovo najnovija verzija ovog dodatka koji podržava Tomcat7 poslužitelj. Da biste izbjegli pogreške, provjerite ima li vaše ovisnosti o servletima opseg postaviti kao pod uvjetom, inače će doći do sukoba na vrijeme izvođenja izvršne staklenka:

 javax.servlet javax.servlet-api 

3. Zaključak

U ovom smo članku opisali mnoge načine stvaranja izvršne datoteke staklenka s raznim Maven dodacima.

Potpuna implementacija ovog vodiča može se naći u ovom (izvršnom jar) i ovom (izvršnom ratu) Github projektima.

Kako testirati? Da bi se projekt kompajlirao u izvršnu datoteku staklenka, molim vas pokrenite Maven sa mvn čist paket naredba.

Nadamo se da će vam ovaj članak dati još nekih uvida u temu i pronaći ćete željeni pristup ovisno o vašim potrebama.

Jedna kratka zadnja napomena - pobrinite se da licence staklenki koje stavljate u paket ne zabranjuju ovu vrstu rada. Općenito, to neće biti slučaj, ali to je nešto što vrijedi razmotriti.