Apache Maven bemutató

1. Bemutatkozás

A szoftverprojekt felépítése általában olyan feladatokból áll, mint a függőségek letöltése, további tégelyek elhelyezése az osztályútvonalon, a forráskód bináris kódba fordítása, tesztek futtatása, a lefordított kód csomagolása olyan telepíthető artefaktumokba, mint a JAR, a WAR és a ZIP fájlok, valamint ezen műtermékek telepítése alkalmazáskiszolgálóra vagy adattárba.

Az Apache Maven automatizálja ezeket a feladatokat, minimalizálva annak kockázatát, hogy az emberek hibát kövessenek el, miközben a szoftvert manuálisan építik, és elválasztják a kód összeállításának és csomagolásának munkáját a kód felépítésétől.

Ebben az oktatóanyagban felfedezzük ezt a hatékony szoftvert a Java szoftverprojektek leírására, felépítésére és kezelésére egy központi információ segítségével - Projekt objektum modell (POM) - ez XML-ben van megírva.

2. Miért használja a Maven-et?

A Maven főbb jellemzői:

  • egyszerű projektbeállítás, amely a legjobb gyakorlatokat követi: Maven megpróbálja elkerülni a lehető legtöbb konfigurációt a projekt sablonok megadásával (megnevezve archetípusok)
  • függőségkezelés: magában foglalja a kompatibilitás automatikus frissítését, letöltését és érvényesítését, valamint a függőségi bezárások (más néven tranzitív függőségek) jelentését
  • elszigeteltség a projektfüggőségek és a beépülő modulok között: Maven esetén a projektfüggőségeket a függőségi adattárak míg a plugin függőségei a bővítménytárak, kevesebb konfliktust eredményez, amikor a beépülő modulok további függőségeket kezdenek letölteni
  • központi adattár rendszer: projektfüggőségek betölthetők a helyi fájlrendszerből vagy nyilvános tárolókból, például a Maven Centralból
A Maven rendszerre történő telepítésének elsajátításához ellenőrizze ezt az oktatóanyagot a Baeldung oldalon.

3. Projekt objektum modell

A Maven projekt konfigurálása a Projekt objektum modell (POM), amelyet a pom.xml fájl. A POM leírja a projektet, kezeli a függőségeket és konfigurálja a szoftver építéséhez szükséges beépülő modulokat.

A POM meghatározza a több modulos projektek moduljai közötti kapcsolatokat is. Nézzük meg egy tipikus alapvető szerkezetét POM fájl:

 4.0.0 org.baeldung org.baeldung jar 1.0-SNAPSHOT org.baeldung //maven.apache.org junit junit 4.12 test // ... 

Vizsgáljuk meg közelebbről ezeket a konstrukciókat.

3.1. Projektazonosítók

Maven egy azonosítókészletet, más néven koordinátákat használ a projekt egyedi azonosításához és a projekttermék csomagolásának megadásához:

  • groupId - a projektet létrehozó vállalat vagy csoport egyedi alapneve
  • artefactId - a projekt egyedi neve
  • változat - a projekt változata
  • csomagolás - csomagolási módszer (pl. HÁBORÚ/BEFŐTTES ÜVEG/postai irányítószám)

Ezek közül az első három (groupId: artifactId: verzió) együtt alkotják az egyedi azonosítót, és azok a mechanizmusok, amelyekkel meghatározhatja, hogy a projekt mely külső könyvtárak (pl. JAR-ek) verzióit használja.

3.2. Függőségek

Ezeket a projekt által használt külső könyvtárakat függőségeknek nevezzük. A Maven függőségkezelési szolgáltatása biztosítja a könyvtárak automatikus letöltését egy központi adattárból, így nem kell őket helyben tárolnia.

Ez a Maven egyik legfontosabb jellemzője, és a következő előnyöket nyújtja:

  • kevesebb tárhelyet igényel, jelentősen csökkentve a távoli adattárakból történő letöltések számát
  • gyorsabbá teszi a projektek megtekintését
  • hatékony platformot kínál a bináris artefaktumok cseréjéhez a szervezeten belül és azon kívül anélkül, hogy minden esetben szükség lenne a műalkotások forrásból történő építésére

A külső könyvtár függőségének deklarálásához meg kell adnia a groupId, artefactId, és a változat a könyvtár. Nézzünk meg egy példát:

 org.springframework rugós mag 4.3.5.KÖZLEMÉNY 

Amint a Maven feldolgozza a függőségeket, letölti a Spring Core könyvtárat a helyi Maven tárolóba.

3.3. Adattárak

A Mavenben található tároló különböző típusú építési műtárgyak és függőségek tárolására szolgál. Az alapértelmezett helyi adattár a .m2 / adattár mappát a felhasználó saját könyvtárában.

Ha egy műtárgy vagy egy beépülő modul elérhető a helyi adattárban, akkor Maven használja. Ellenkező esetben egy központi tárhelyről tölti le és tárolja a helyi tárolóban. Az alapértelmezett központi adattár a Maven Central.

Egyes könyvtárak, például a JBoss kiszolgáló, nem állnak rendelkezésre a központi adattárban, de egy másik tárolóban állnak rendelkezésre. Ezeknek a könyvtáraknak meg kell adnia az URL-t a benne lévő alternatív lerakat számára pom.xml fájl:

  JBoss tárház //repository.jboss.org/nexus/content/groups/public/ 

Felhívjuk figyelmét, hogy projektjeiben több tárhelyet is használhat.

3.4. Tulajdonságok

Az egyedi tulajdonságok elősegíthetik pom.xml fájl könnyebben olvasható és karbantartható. A klasszikus használati esetben egyéni tulajdonságokat használhat a projekt függőségeinek verzióinak meghatározásához.

A Maven tulajdonságok érték-helyőrzők, és az a-on belül bárhol elérhetők pom.xml a jelölés használatával $ {name}, hol név az ingatlan.

Lássunk egy példát:

 4.3.5.RELEASE org.springframework rugós mag $ {spring.version} org.springframework tavaszi környezet $ {spring.version} 

Most, ha frissíteni kívánja a Spring-et egy újabb verzióra, akkor csak atulajdonságcímke és az azt a tulajdonságot használó összes függőség a címkék frissülnek.

A tulajdonságokat gyakran használják az építési útváltozók meghatározásához is:

 $ {project.build.directory} / tmp / // ... $ {project.resources.build.folder} // ... 

3.5. Épít

A épít szakasz a Maven nagyon fontos szakasza is POM. Információt nyújt az alapértelmezett Maven-ről cél, a lefordított projekt könyvtárát és az alkalmazás végleges nevét. Az alapértelmezett épít szakasz így néz ki:

 telepítse a következőt: $ {basedir} / target $ {artifactId} - $ {version} filters / filter1.properties // ... 

A lefordított tárgyak alapértelmezett kimeneti mappája meg van nevezve cél, és a csomagolt műtárgy végső neve a artefactId és változat, de bármikor megváltoztathatja.

3.6. Használata Profilok

A Maven másik fontos jellemzője a támogatása profilok. A profil alapvetően konfigurációs értékek halmaza. Használva profilok, testre szabhatja az összeállítást különböző környezetekhez, például a gyártáshoz / teszteléshez / fejlesztéshez:

  termelés // ... fejlesztés igaz // ... 

Amint a fenti példában láthatja, az alapértelmezett profil értéke fejlődés. Ha futtatni szeretné a Termelés profil, a következő Maven parancsot használhatja:

mvn clean install -Produkció

4. Maven Építsen életciklusokat

Minden Maven-összeállítás a megadottakat követi életciklus. Több buildet is végrehajthat életcikluscélok, beleértve azokat is összeállítani a projekt kódját hozza létre a csomag, és telepítés az archív fájl a helyi Maven-függőségtárban.

4.1. Az életciklus szakaszai

Az alábbi listában a legfontosabb Maven látható életciklus fázisok:

  • érvényesít - ellenőrzi a projekt helyességét
  • összeállítani - a mellékelt forráskódot bináris műtárgyakká fordítja
  • teszt - egységteszteket hajt végre
  • csomag - a lefordított kódot archív fájlba csomagolja
  • integrációs teszt - további vizsgálatokat végez, amelyekhez csomagolás szükséges
  • igazolja - ellenőrzi, hogy a csomag érvényes-e
  • telepítés - telepíti a csomagfájlt a helyi Maven tárolóba
  • bevetni - telepíti a csomagfájlt egy távoli kiszolgálóra vagy adattárba

4.2. Bővítmények és Célok

Egy Maven csatlakoztat egy vagy több gyűjteménye célok. A célokat fázisokban hajtják végre, ami segít meghatározni a sorrendet célok kivégzik.

A Maven által hivatalosan támogatott bővítmények gazdag listája itt érhető el. Van egy érdekes cikk is arról, hogyan lehet futtatható fájlt készíteni BEFŐTTES ÜVEG különféle pluginok segítségével.

Hogy jobban megértsük, melyik célok mely fázisokban futnak alapértelmezés szerint, vessen egy pillantást az alapértelmezett Maven-re életciklus kötések.

A fenti fázisok bármelyikének elvégzéséhez csak egy parancsot kell meghívnunk:

mvn 

Például, mvn tiszta telepítés eltávolítja a korábban létrehozott jar / war / zip fájlokat és az összeállított osztályokat (tiszta) és futtassa le az új archívum telepítéséhez szükséges összes fázist (telepítés).

Kérjük, vegye figyelembe, hogy célok által biztosított bővítmények a különböző fázisaihoz társítható életciklus.

5. Az első Maven-projektje

Ebben a szakaszban a Maven parancssori funkcionalitását fogjuk használni egy Java projekt létrehozásához.

5.1. Egyszerű Java projekt létrehozása

Egy egyszerű Java projekt felépítéséhez futtassuk a következő parancsot:

mvn archetípus: generál -DgroupId = org.baeldung -DartifactId = org.baeldung.java -DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = hamis

A groupId a projektet létrehozó csoportot vagy egyént jelző paraméter, amely gyakran megfordított vállalati domain név. A artefactId a projektben használt alapcsomag neve, és mi a szabványt használjuk archetípus.

Mivel nem adtuk meg a verziót és a csomagolás típusát, ezek az alapértelmezett értékekre lesznek beállítva - a verzió értéke 1,0-SNAPSHOT, és a csomagolást állítják befőttes üveg.

Ha nem tudja, mely paramétereket adja meg, akkor mindig megadhatja interactiveMode=igaz, úgy, hogy Maven megadja az összes szükséges paramétert.

Miután a parancs befejeződött, van egy Java projektünk, amely egy App.java osztály, amely csak egy egyszerű „Hello World” program, a src / main / java mappába.

Van egy példa teszt osztályunk is src / test / java. A pom.xml a projekt hasonló lesz ehhez:

 4.0.0 org.baeldung org.baeldung.java jar 1.0-SNAPSHOT org.baeldung.java //maven.apache.org junit junit 4.1.2 teszt 

Mint láthatja, a junit a függőség alapértelmezés szerint biztosított.

5.2. Projekt összeállítása és csomagolása

A következő lépés a projekt összeállítása:

mvn össze

Maven végig fog futni életciklus a. szükséges fázisai összeállítani szakasz a projekt forrásainak felépítéséhez. Ha csak a teszt szakaszban használhatja:

mvn teszt

Most hívjuk meg a csomag fázis, amely elkészíti az összeállított archívumot befőttes üveg fájl:

mvn csomag

5.3. Alkalmazás végrehajtása

Végül a Java programot hajtjuk végre exec-maven-plugin. Konfiguráljuk a szükséges bővítményeket a pom.xml:

 src maven-compiler-plugin 3.6.1 1.8 1.8 org.codehaus.mojo exec-maven-plugin 1.5.0 org.baeldung.java.App 

Az első plugin, maven-compiler-plugin, felelős a forráskód összeállításáért a Java 1.8 verzióval. A exec-maven-plugin rákeres a mainClass projektünkben.

Az alkalmazás futtatásához a következő parancsot futtatjuk:

mvn exec: java

6. Több modulos projektek

A Mavenben a több modulos projekteket kezelő mechanizmus (más néven: összesítő projektek) hívják Reactor.

A Reaktor összegyűjti az összes rendelkezésre álló modult az építkezéshez, majd a projekteket a megfelelő építési sorrendbe rendezi, végül pedig egyesével felépíti őket.

Nézzük meg, hogyan hozhat létre több modulos szülőprojektet.

6.1. Szülőprojekt létrehozása

Először is létre kell hoznunk egy szülőprojektet. Új projekt létrehozása a névvel szülőprojekt, a következő parancsot használjuk:

mvn archetípus: generál -DgroupId = org.baeldung -DartifactId = szülő-projekt

Ezután frissítjük a csomagolás típusát a pom.xml fájl, jelezve, hogy ez a szülő modul:

pom

6.2. Hozzon létre almodul projekteket

A következő lépésben létrehozunk egy almodul projektet a szülő-projekt:

cd szülőprojekt mvn archetípus: -DgroupId = org.baeldung -DartifactId = mag mvn archetípus: -DgroupId = org.baeldung -DartifactId = szolgáltatás mvn archetípus: -DgroupId = org.baeldung -DartifactId = webapp

Annak ellenőrzéséhez, hogy helyesen hoztuk-e létre az almodulokat, nézzük meg a szülő-projekt pom.xml fájl, ahol három modult kell látnunk:

 alapszolgáltatás webapp 

Ezenkívül az egyes almodulokba szülő szakasz kerül pom.xml:

 org.baeldung szülőprojekt 1.0-SNAPSHOT 

6.3. Engedélyezze a függőségkezelést a szülői projektben

A függőségkezelés egy függvényinformáció központosítási mechanizmusa egy muti-modulos szülőprojekt és gyermekei számára.

Ha van olyan projektje vagy modulja, amely örökli a közös szülőt, akkor a függőségekkel kapcsolatos összes szükséges információt beírhatja a közösbe. pom.xml fájl. Ez leegyszerűsíti a gyermekben található műtárgyakra való hivatkozásokat POMs.

Vessünk egy pillantást a minta szülőire pom.xml:

   org.springframework rugós mag 4.3.5. KÖZLEMÉNY // ... 

A rugómag verzió a szülőben, az összes függő almodul rugómag csak a. segítségével deklarálhatja a függőséget groupId és artefactId, és a verzió öröklődik:

  org.springframework rugós mag // ... 

Ezenkívül kizárásokat adhat a szülők függőségkezeléséhez pom.xml, így az egyes könyvtárakat nem öröklik meg a gyermekmodulok:

  org.springframework tavaszi kontextus 

Végül, ha egy gyermekmodulnak egy felügyelt függőség más verzióját kell használnia, akkor felülírhatja a felügyelt verziót a gyermekben pom.xml fájl:

 org.springframework rugós mag 4.2.1.FELHASZNÁLÁS 

Felhívjuk figyelmét, hogy míg a gyermekmodulok örökölnek a szülőprojektjüktől, a szülőprojektnek nem feltétlenül vannak összesített moduljai. Másrészt egy szülőprojekt olyan projekteket is összesíthet, amelyek nem örökölnek belőle.

Az örökléssel és az összesítéssel kapcsolatos további információkért kérjük, olvassa el ezt a dokumentációt.

6.4. Az almodulok frissítése és egy projekt építése

Megváltoztathatjuk a csomagolás az egyes részmodulok típusa. Változtassunk például a csomagolás a webapp modul a HÁBORÚ frissítésével pom.xml fájl:

háború

Most tesztelhetjük projektünk felépítését a mvn tiszta telepítés parancs. A Maven naplók kimenetének hasonlónak kell lennie ehhez:

[INFO] Projektek keresése ... [INFO] Reaktorépítési sorrend: [INFO] szülőprojekt [INFO] mag [INFO] szolgáltatás [INFO] webapp // ............. [ INFO] ---------------------------------------- [INFO] Reaktor összefoglalása: [ INFO] ----------------------------------------- [INFO] szülő-projekt. ................. SIKER [2.041s] [INFO] mag ........................ .... SIKER [4.802s] [INFO] szolgáltatás ......................... SIKER [3.065s] [INFO] webalkalmazás ... ....................... SIKER [6.125s] [INFO] ------------------- ----------------------

7. Következtetés

Ebben a cikkben megvitattuk az Apache Maven build eszköz néhány népszerűbb funkcióját.

A Baeldung összes kódpéldája a Maven használatával készült, így könnyedén megnézheti a GitHub projekt webhelyét a különböző Maven konfigurációk megtekintéséhez.