Ako vytvoriť spustiteľný JAR s Maven

1. Úvod

V tomto rýchlom článku sa zameriame na zabalenie projektu Maven do spustiteľného súboru Jar.

Spravidla sa pri vytváraní a jar súboru, chceme ho ľahko vykonať bez použitia IDE; za týmto účelom prediskutujeme konfiguráciu a výhody / nevýhody použitia každého z týchto prístupov na vytvorenie spustiteľného súboru.

2. Konfigurácia

S cieľom vytvoriť spustiteľný súbor jar, nepotrebujeme žiadne ďalšie závislosti. Potrebujeme len vytvoriť projekt Java Maven a mať aspoň jednu triedu s hlavný(…) metóda.

V našom príklade sme vytvorili triedu Java s názvom ExecutableMavenJar.

Musíme sa tiež uistiť, že naše pom.xml obsahuje nasledujúce prvky:

4.0.0 com.baeldung jadro-java 0.1.0-SNAPSHOT jar

Najdôležitejším aspektom je tu typ - vytvorenie spustiteľného súboru jar, znova skontrolujte, či konfigurácia používa a jar typu.

Teraz môžeme začať používať rôzne riešenia.

2.1. Ručná konfigurácia

Začnime s manuálnym prístupom - pomocou maven-dependency-plugin.

Najskôr skopírujeme všetky požadované závislosti do priečinka, ktorý zadáme:

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

Je potrebné si všimnúť dva dôležité aspekty. Najskôr určíme cieľ závislosti na kopírovaní, ktorý povie Mavenovi, aby tieto závislosti skopíroval do zadaného outputDirectory.

V našom prípade vytvoríme priečinok s názvom libs, vo vnútri adresára na zostavenie projektu (ktorý je zvyčajne cieľ priečinok).

V druhom kroku vytvoríme spustiteľný súbor a cestu triedy jar, s odkazom na závislosti skopírovaným v prvom kroku:

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

Najdôležitejšou súčasťou vyššie uvedeného je prejav konfigurácia. Pridáme cestu k triede so všetkými závislosťami (priečinok libs /) a poskytujú informácie o hlavnej triede.

Upozorňujeme, že musíme uviesť plne kvalifikovaný názov triedy, čo znamená, že bude obsahovať názov balíka.

Výhody a nevýhody tohto prístupu sú:

  • klady - transparentný proces, kde môžeme určiť každý krok
  • zápory - manuálne, závislosti sú mimo finále jar, čo znamená, že je váš spustiteľný súbor jar sa spustí, iba ak libs priečinok bude prístupný a viditeľný pre priečinok jar

2.2. Doplnkový modul Apache Maven

Doplnkový modul Apache Maven Assembly Plugin umožňuje používateľom agregovať výstup projektu spolu s jeho závislosťami, modulmi, dokumentáciou lokality a ďalšími súbormi do jedného spustiteľného balíka.

Hlavným cieľom v montážnom doplnku je slobodný cieľ - slúži na vytvorenie všetkých zostáv (všetky ostatné ciele sú zastarané a budú odstránené v budúcom vydaní).

Pozrime sa na konfiguráciu v pom.xml:

 org.apache.maven.plugins balíček maven-assembly-plugin single com.baeldung.executable.ExecutableMavenJar jar-so-závislosťami 

Podobne ako v prípade manuálneho prístupu musíme poskytnúť informácie o hlavnej triede; rozdiel je v tom, že Maven Assembly Plugin automaticky skopíruje všetky požadované závislosti do a jar spis.

V deskriptorRef časti konfiguračného kódu sme zadali názov, ktorý sa pridá k názvu projektu.

Výstup v našom príklade bude pomenovaný ako core-java-jar-with-dependencies.jar.

  • klady - závislosti vo vnútri - jar súbor, iba jeden súbor
  • zápory - základná kontrola balenia vášho artefaktu, napríklad neexistuje podpora premiestnenia triedy

2.3. Doplnok na zatienenie Apache Maven

Doplnok Apache Maven Shade Plugin poskytuje možnosť zabaliť artefakt do súboru uber-jar, ktorá pozostáva zo všetkých závislostí potrebných na spustenie projektu. Okrem toho podporuje tieňovanie - tj. Premenovávanie - balíkov niektorých závislostí.

Pozrime sa na konfiguráciu:

 org.apache.maven.plugins maven-odtieň-plugin odtieň odtieň skutočná com.baeldung.executable.ExecutableMavenJar 

Existujú tri hlavné časti tejto konfigurácie:

Najprv, označí všetky závislosti, ktoré sa majú zabaliť do jar.

Po druhé, musíme určiť implementáciu transformátora; v našom príklade sme použili štandardný.

Nakoniec musíme určiť hlavnú triedu našej aplikácie.

Výstupný súbor bude pomenovaný core-java-0.1.0-SNAPSHOT-shaded.jar, kde jadro-java je názov nášho projektu, za ktorým nasleduje verzia snímky a názov doplnku.

  • klady - závislosti vo vnútri - jar súbor, pokročilá kontrola balenia vášho artefaktu, s tieňovaním a premiestnením triedy
  • zápory - komplexná konfigurácia (najmä ak chceme využívať pokročilé funkcie)

2.4. Jeden doplnok Jar Maven

Ďalšia možnosť na vytvorenie spustiteľného súboru jar je projekt One Jar.

Toto poskytuje vlastný načítavač tried, ktorý vie, ako načítať triedy a zdroje z pohárov v archíve, nie z poháre v súborovom systéme.

Pozrime sa na konfiguráciu:

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

Ako sa ukazuje v konfigurácii, musíme určiť hlavnú triedu a pripojiť všetky závislosti, ktoré sa majú zostaviť, pomocou attachToBuild= pravda.

Mali by sme poskytnúť aj výstupný názov súboru. Cieľ pre Maven navyše je jednopohárok. Upozorňujeme, že One Jar je komerčné riešenie, ktoré vytvorí závislosť poháre nebol za behu expandovaný do súborového systému.

  • klady - čistý model delegovania, umožňuje triedam byť na najvyššej úrovni One Jar, podporuje externé poháre a môže podporovať natívne knižnice
  • zápory - od roku 2012 nie je aktívne podporovaný

2.5. Doplnok Spring Boot Maven

Posledným riešením, na ktoré sa pozrieme, je Spring Boot Maven Plugin.

To umožňuje zabaliť spustiteľný súbor jar alebo vojna archivuje a spúšťa aplikáciu „na mieste“.

Aby sme ho mohli použiť, musíme použiť minimálne Maven verzie 3.2. Podrobný popis je k dispozícii tu.

Pozrime sa na konfiguráciu:

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

Medzi doplnkom Spring a ostatnými sú dva rozdiely. Najskôr sa nazýva cieľ popravy prebaliťa je pomenovaný klasifikátor pružinová topánka.

Upozorňujeme, že na použitie tohto doplnku nepotrebujeme aplikáciu Spring Boot.

  • klady - závislosti vo vnútri a jar súbor, môžete ho spustiť na každom prístupnom mieste, pokročilú kontrolu balenia vášho artefaktu, s vylúčením závislostí z jar kartotéka atď., balenie vojna súbory tiež
  • zápory - pridáva potenciálne nepotrebné triedy týkajúce sa Spring a Spring Boot

2.6. Webová aplikácia so spustiteľným Tomcatom

V poslednej časti sa chceme venovať téme samostatnej webovej aplikácie, ktorá je zabalená vo vnútri jar spis. Aby sme to dosiahli, musíme použiť iný doplnok určený na vytváranie spustiteľných súborov jar:

 org.apache.tomcat.maven tomcat7-maven-plugin 2.0 tomcat-run balíček iba pre war-war / false webapp.jar utf-8 

The cieľ je nastavený ako iba pre vojnu, cesta na váš server je uvedený vo vnútri konfigurácia značka s ďalšími vlastnosťami, napríklad finalName, znaková sada atď. Postaviť jar, bežať mužský balíček, ktorého výsledkom bude vytvorenie webapp.jar vo vašom cieľ adresár. Bežať

Ak chcete spustiť aplikáciu, napíšte to do svojej konzoly: java -jar target / webapp.jar a skúste to vyskúšať zadaním localhost: 8080/ v prehliadači.

  • klady - mať jeden súbor, ľahko nasaditeľný a spustiteľný
  • zápory - veľkosť súboru je oveľa väčšia, kvôli zabaleniu integrovanej distribúcie Tomcat do war spis

Upozorňujeme, že toto je najnovšia verzia tohto doplnku, ktorý podporuje server Tomcat7. Ak sa chcete vyhnúť chybám, skontrolujte, či existuje vaša závislosť na serveroch Servlets rozsah nastaviť ako za predpokladu, inak dôjde ku konfliktu na adrese beh programu vykonateľného jar:

 javax.servlet javax.servlet-api provided 

3. Záver

V tomto článku sme popísali veľa spôsobov vytvorenia spustiteľného súboru jar s rôznymi Maven doplnkami.

Celú implementáciu tohto tutoriálu nájdete v tomto (spustiteľný súbor) a tomto (spustiteľný súbor) projektoch Github.

Ako testovať? S cieľom zostaviť projekt do spustiteľného súboru jar, prosím, spustite Maven s mvn čistý balíček príkaz.

Dúfajme, že tento článok poskytne ďalšie poznatky o tejto téme a podľa vašich potrieb nájdete preferovaný prístup.

Jedna krátka poznámka na záver - uistite sa, že licencie nádob, ktoré zväzujete, nezakazujú tento druh operácie. Spravidla to tak nebude, ale je to niečo, čo stojí za zváženie.


$config[zx-auto] not found$config[zx-overlay] not found