Apache Maven

Apache Maven
Típusú Automatizálási és csomagkezelő rendszer kiépítése
Fejlesztő Apache Software Foundation
Beírva Java [3] [4] [5]
Operációs rendszer platformközi
Első kiadás 2008. február 1. [1]
Hardver platform Java virtuális gép
legújabb verzió
Olvasható fájlformátumok maven metaadatok [d]
Generált fájlformátumok maven metaadatok [d]
Engedély Apache licenc 2.0
Weboldal maven.apache.org
 Médiafájlok a Wikimedia Commons oldalon

Az Apache Maven  egy keretrendszer a projektek összeállításának automatizálására a POM ( Project Object Model ) nyelven , amely az  XML egy részhalmaza [6] , fájlokban található szerkezetük leírása alapján . A Maven projektet az Apache Software Foundation adja ki, ahol formálisan a Jakarta Project része .

A rendszer neve jiddis szó , melynek jelentése nagyjából úgy fejezhető ki, hogy "tudásgyűjtő" [7] .

A Maven deklaratív , nem kötelező (ellentétben az Apache Ant build automatizálási eszközzel ) projektfelépítést biztosít. A projektleíró fájlok a projektspecifikációt tartalmazzák, nem pedig az egyes végrehajtási parancsokat. A specifikációban leírt összes fájlfeldolgozási feladatot a Maven egy sor beépített és külső beépülő modulon keresztül kezeli.

A Maven JavaC#RubyScala és más nyelveken írt projektek létrehozására és kezelésére szolgál [8] .

A figyelemre méltó alternatívák közé tartozik a Gradle automatizált összeállítási rendszer , amely az Apache Ant és a Maven elveire épül, de POM konfiguráció helyett speciális Groovy DSL-t használ.

Fejlesztési előzmények

A Mavent a kanadai Jason van Zyl és az általa alapított Sonatype cég hozta létre . 2002-ben az Apache Turbine alprojektjeként indult, majd 2003-ban a Maven felső szintű Apache projektnek minősült, ezzel egy időben jelent meg első verziója - a Maven 1.x, 2004. július 13-án 1.0-s verzióként. Ez azonban olyan gyorsan történt, hogy néhány részletet nem gondoltak át, például túl sok konfigurációs, teljesítménybeli problémákat.

Ezért a koncepció véglegesítésre került, és 2005-ben megkezdődött a Maven 2.x párhuzamos fejlesztése, amely 2.0-s verziójában 2005. október 19-én került átadásra. [9]

A Maven 1.x nincs továbbfejlesztve, és a felhasználói támogatásra és a hibajavításokra korlátozódik. [tíz]

A Maven 3.0 fejlesztése 2008-ban kezdődött. Nyolc alfa kiadás után a Maven 3.0 első bétaverziója 2010 októberében jelent meg. Különös figyelmet fordítottak a Maven 2-vel való visszafelé kompatibilitásra . A legtöbb projekt esetében a Maven 2-ről a Maven 3-ra való átállás nem igényel változtatásokat [11] .

A Maven fejlesztés a következő alprojektekben zajlik:

Projekt leírása Objektummodell

Az Apache Maven által támogatott projekt felépítéséhez szükséges információkat egy pom.xml nevű XML fájl tartalmazza . Indításkor a Maven ellenőrzi, hogy a konfigurációs fájl tartalmazza-e az összes szükséges adatot, és hogy az összes adat szintaktikailag helyes-e.

Példa pom.xml fájlra :

<projekt> <!-- a Maven 2.x POM-ok modellváltozata mindig 4.0.0 --> <modelVersion> 4.0.0 </modelVersion> <!-- a projekt koordinátái, vagyis olyan értékkészlet, amely lehetővé teszi a projekt egyedi azonosítását --> <groupId> com.mycompany.app </groupId> <artifactId> my-app </artifactId> <version> 1.0 </version> <!-- könyvtári függőségek --> <függőségek> <függőségek> <!-- a szükséges könyvtár koordinátái --> <groupId> junit < /groupId> <artifactId> junit </artifactId> <version> 3.8.1 </version> <!-- ez a könyvtár csak tesztek futtatására és fordítására szolgál --> <scope> teszt </scope> </dependency> </dependencies> </project>

A minimális konfiguráció tartalmazza a konfigurációs fájl verzióját, a projekt nevét, szerzőjét és a verziót [12] . A pom.xml használatával konfigurálva vannak a függőségek más projektektől, a projekt felépítési folyamatának egyes fázisai (build process), valamint a felépítési sorrendet megvalósító bővítmények listája [12] .

A nagy projektek több modulra vagy alprojektre oszthatók, amelyek mindegyike saját POM-mal rendelkezik. A modulokon végzett műveletek egy közös gyökér POM-on keresztül hajthatók végre egyetlen paranccsal.

Az alprojekt POM-fájlok örökölhetik a konfigurációt más konfigurációs fájloktól. Ugyanakkor alapértelmezés szerint minden konfigurációs fájl szükségszerűen a "Super POM" fájlból [13] öröklődik . A Super POM alapértelmezett konfigurációt biztosít, például alapértelmezett könyvtárstruktúrát, alapértelmezett beépülő modulokat, életciklus-fázisokhoz való kötést stb.

Alapfogalmak

Konfigurációs konvenciók

A Maven támogatja az egyezményenkénti elvet , amely szerint a kérdéses szempontot akkor és csak akkor kell konfigurálni, ha az adott szempont nem felel meg bizonyos specifikációknak. Ennek eredményeként ez csökkenti a szükséges konfiguráció mennyiségét a rugalmasság elvesztése nélkül. Ennek az elvnek az egyik következménye, hogy nincs szükség a fájl elérési útjainak kifejezetten megadására, ami leegyszerűsíti a pom.xml tartalmát . Azonban szinte az összes szabvány, amelyre a Maven támaszkodik, egyéni konfigurációval megváltoztatható [14] [15] .

Archetípusok

A Maven a Maven archetípusok elvét használja (Eng. Archetypes ). Az archetípus a minták eszköze, amelyek mindegyikét egy minta vagy modell határozza meg, analógiával, amellyel a származékok jönnek létre. [16]

Az alapértelmezett könyvtárstruktúra az archetípus elv egyik Maven megvalósítása. A következő struktúra egy Java projekt legfontosabb könyvtárait mutatja [17] :

  • Projekt gyökérkönyvtár : pom.xml fájl és minden további alkönyvtár
    • src : minden forrásfájl
      • src/main : magának a terméknek a forrásfájljai
        • src/main/java : Java forrás
        • src/main/resources : egyéb fájlok, amelyeket a fordítás vagy a végrehajtás során használnak, például tulajdonságfájlok
      • src/test : az automatikus tesztelés beállításához szükséges forrásfájlok
        • src/test/java : JUnit tesztesetek automatizált teszteléshez
    • cél : a Maven munkája során létrehozott összes fájl
      • target/classes : lefordított Java osztályok

Életciklus

A maven projekt életciklusa elnevezett fázisok listája, amely meghatározza a cselekvések sorrendjét a felépítéskor. A Maven életciklusa három független végrehajtási parancsot tartalmaz: [18]

  • tiszta - életciklus a projekt tisztításához. A következő fázisokat tartalmazza:
    1. előtisztítás
    2. tiszta
    3. post tiszta
  • alapértelmezett a fő életciklus, amely a következő fázisokat tartalmazza:
    1. validál – ellenőrzi, hogy a projektstruktúra teljes és megfelelő-e.
    2. generál-forrásokat
    3. folyamatforrások
    4. erőforrásokat generál
    5. folyamat erőforrásait
    6. összeállítás – a források összeállításra kerülnek.
    7. folyamat-teszt-források
    8. folyamat-teszt-erőforrások
    9. teszt összeállítás
    10. teszt - az összeállított kódot egy előre elkészített tesztkészlet teszteli.
    11. csomag - az összeállított osztályok és egyéb források csomagolása. Például egy JAR fájlban.
    12. integrációs teszt - a szoftver egészét vagy nagy moduljait integrációs tesztelésnek vetik alá. A szoftvertermék összetevői közötti kölcsönhatást ellenőrizzük.
    13. telepítés - telepítse a szoftvert a helyi Maven tárolóba, hogy elérhetővé tegye az aktuális felhasználó más projektjei számára.
    14. üzembe helyezés – A szoftver stabil verziója egy távoli Maven tárolóba kerül, hogy elérhető legyen más felhasználók számára.
  • helyszín - a projektdokumentáció generálásának életciklusa. Fázisokból áll:
    1. helyszín előtt
    2. webhely
    3. poszt webhely
    4. site-deploy

A szabványos életciklusok funkcionalitással bővíthetők a Maven bővítmények segítségével. A beépülő modulok lehetővé teszik új lépések beszúrását a szabványos ciklusba (például terjesztés az alkalmazáskiszolgálón), vagy kiterjesztik a meglévő lépéseket.

Építészet

A Maven egy olyan beépülő architektúrán alapul, amely lehetővé teszi különböző feladatok ( fordítás ,  tesztelés, összeállítás, telepítés, ellenőrzési stílus, pmd, scp-transfer ) használatát egy adott projekthez anélkül, hogy kifejezetten telepítenie kellene őket. Ez annak köszönhető, hogy az információ a szabványos bemeneten keresztül érkezik a bővítményhez, és az eredményeket a szabványos kimenetére írják. Elméletileg ez lehetővé teszi bárki számára, hogy beépülő modulokat írjon, hogy kölcsönhatásba lépjen a projekt összeállítási eszközeivel (fordítókkal, teszteszközökkel stb.) bármely más nyelvhez. A valóságban a Javatól eltérő nyelvek támogatása jelenleg minimális. Létezik egy bővítmény a .NET keretrendszerhez [19] , valamint a C / C++- hoz [20] [21] .

Az elérhető beépülő modulok száma jelenleg nagyon nagy, és többek között olyan bővítményeket is tartalmaz, amelyek lehetővé teszik egy webalkalmazás futtatását közvetlenül a Maventől, hogy azt böngészőben tesztelje; adatbankok tesztelését vagy létrehozását lehetővé tevő bővítmények; beépülő modulok, amelyek lehetővé teszik webszolgáltatások létrehozását. A fejlesztő feladata ilyen helyzetben a legmegfelelőbb beépülő modul megtalálása és alkalmazása.

A bővítmény számos célt ér el a következő szintaxissal:

mvn [bővítmény neve]: [cél neve]

Például egy Java projekt lefordítható egy fordító beépülő modullal [22] a parancs végrehajtásával mvn compiler:compile.

Vannak Maven beépülő modulok az építéshez, teszteléshez, forrásvezérléshez, webszerver futtatásához, Eclipse projektfájlok generálásához stb. [23] A beépülő modulok listája és konfigurálása a pom.xml<plugins> fájl egy részében található . A beépülő modulok néhány alapvető csoportja alapértelmezés szerint minden projektben megtalálható.

Függőségek

A pom.xml fájl meghatározza a Maven által felügyelt projektek függőségeit. A függőségkezelő számos alapelven alapul:

  • Adattárak. A Maven megkeresi a szükséges fájlokat a helyi könyvtárakban vagy a helyi maven tárolóban. Ha a függőséget nem lehet helyileg feloldani, a Maven csatlakozik a hálózat megadott maven lerakatához, és a helyi lerakatba másolja. A Maven alapértelmezés szerint a Maven Central Repository -t [24] használja , de a fejlesztő más nyilvános Maven-tárolókat is beállíthat, mint például az Apache, az Ibiblio, a Codehaus vagy a Java.Net.
  • tranzitív függőségek. A szükséges könyvtárak automatikusan betöltődnek a projektbe. A verziókonfliktusok feloldásakor a „legközelebbi” függőség elvét alkalmazzák, vagyis azt a függőséget választják ki, amelyhez a függő projektek listáján keresztül a legrövidebb az út.
  • A függőségek megszüntetése. A projektleíró fájl lehetőséget biztosít a függőségek kizárására, ha ciklikusságot észlel, vagy ha egy adott könyvtárra nincs szükség.
  • Függőségek keresése. A függőségek (nyílt forráskódú könyvtárak és modulok) koordinátáik (groupId, artifactId és verzió) alapján kereshetők. Ezeket a koordinátákat speciális keresők segítségével lehet meghatározni, például a Maven keresőmotorral [25] . Például a "pop3" keresési attribútum esetében a keresőmotor a groupId="com.sun.mail" és az artifactId="pop3" kifejezésekkel tér vissza.
  • Adattárkezelők. A tárolók olyan Maven Repository Managerekkel valósulnak meg, mint az Apache Archiva, a Nexus (korábban Proximity), az Artifactory, a Codehaus Maven Proxy vagy a Dead Simple Maven Proxy [26] .

A függőségi hatókör csak a projektépítés egy bizonyos szakaszában teszi lehetővé a függőségek felvételét. 6 lehetséges terület [27] :

  1. összeállítani. Az alapértelmezett terület. A függőség a projekt összes osztálykeresési útvonalán elérhető. Elosztva függő projektekhez.
  2. biztosítani. A hatókör hasonló a fordításhoz, azzal a különbséggel, hogy maga a JDK vagy a tároló biztosítja a függőséget futás közben.
  3. futásidő. A függőség nem a fordításhoz, hanem a végrehajtáshoz szükséges.
  4. teszt. A függőség nem szükséges az alkalmazás normál működéséhez, csak a fordításhoz és a tesztek futtatásához.
  5. rendszer. A hatókör hasonló a megadotthoz, kivéve, hogy a függőséget tartalmazó JAR kifejezetten meg van határozva. A műterméket nem keresi meg a tárban.
  6. import (a Maven 2.0.9 óta) csak pom-függőséggel használható a <dependencyManagement>. Az aktuális POM függőségei lecserélődnek a megadott POM függőségeire.

A projekt úgy néz ki, mint Maven

A Maven-nel karbantartott projektnek meg kell felelnie bizonyos feltételeknek, hogy a segédprogram olvashassa, elemezze és felépítse. Ez bizonyos korlátozásokat ír elő a címtárszerkezetre vonatkozóan, és további lépésekre van szükség, ha a projekt kezdetben más szerkezettel rendelkezik. [28]

Ahhoz, hogy a Maven felismerje a projektet feldolgozás alatt, tartalmaznia kell egy meghatározott könyvtárstruktúrát. Minden forráskód fájlnak a relatív elérési útban kell lennie: " \src\main\java " [17] .

A webprojekt web.xml konfigurációs fájljának a \src\main\webapp\WEB-INF könyvtárban kell lennie [17 ] .

A Maven projekt pom.xml konfigurációs fájljának a projekt gyökérkönyvtárában kell lennie. Célja szerint tartalmazhat távoli tárolót, archívum létrehozására szolgáló bővítményeket, fordító beépülő modult és így tovább. A webprojektnek további függőségeket is hozzá kell adnia, például a javaee.jar fájlt.

Tehát a kimeneti webprojekt konfigurációs fájlja, összhangban a Mavennel, így néz ki:

<project xmlns= "http://maven.apache.org/POM/4.0.0" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http:/ /maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" > <modelVersion> 4.0.0 </modelVersion> <groupId> com.mkyong </groupId> < artifactId> servletdemo </artifactId> <csomagolás> háború </packaging> <verzió> 1.0-SNAPSHOT </version> <name> servletdemo </name> <url> http://maven.apache.org </url> <repository> <repository> <id> java.net </id> <url> http://download.java.net/maven/2 </url> </repository> </repository> <build> <plugins> <plugin> <groupId> org.apache.maven.plugins </groupId> <artifactId> maven -war-plugin </artifactId> <configuration> <webResources> <resource> <directory> ${basedir }/src/main/java </directory> <targetPath> WEB-INF/classes </targetPath> <includes> <include> **/*.properties </include> <include> **/*.xml </ include> <include> **/*.css </include> <include> **/*.html </include> </includes> </resource> </webResources> </configuration> </plugin> <plugin > <artifactId> maven-compiler-plugin </artifactId> <configuration> <source> 1.6 </source> <target> 1.6 </target> </configuration> </plugin> </plugins> </build> </ projekt>

Ha a fenti követelmények mindegyike teljesül, a Maven projekt készen áll olyan életciklus-fázisok végrehajtására, mint például a fordítás, az archívum felépítése és a dokumentáció generálása [29] .

Példa az üzenetek kimeneti naplójára a parancs végrehajtásakor mvn war:war:

E:\workspace\servletdemo>mvnwar:war [INFO] Projektek keresése... ....... [INFO] Háborús projekt feldolgozása [INFO] Webalkalmazás-erőforrások másolása[E:\workspace\servletdemo] [INFO] Webapp összeállítása [47 msec] alatt [INFO] Építési háború: E:\workspace\servletdemo\target\servletdemo-1.0-SNAPSHOT.war [INFO]------------------------------------------------ ----- [INFO] SIKERES ÉPÍTÉS [INFO]------------------------------------------------ -----

Kölcsönhatás fejlesztői környezetekkel

Egyes IDE- ekhez a Maven beépülő modulokat biztosít, amelyek lehetővé teszik az életciklus kezelését az IDE felületén keresztüli parancsok végrehajtásával. Az ilyen fejlesztői környezetek listája tartalmazza az Eclipse -t ( M2eclipse bővítményen keresztül ), az IntelliJ IDEA -t , a NetBeans -t , a JBuilder -t , a JDeveloper -t (11.1.2-es verzió), a MyEclipse-t, az Emacs -t [30].

Ezek a beépülő modulok lehetővé teszik a POM kényelmes szerkesztését vagy a POM használatával a projekt függőségeit a használt IDE igényeinek megfelelően.

Jegyzetek

  1. CrunchBase  (angol) - 2007.
  2. https://maven.apache.org/docs/3.8.6/release-notes.html
  3. https://www.zhihu.com/question/20297619
  4. A maven2 nyílt forráskódú projekt az Open Hub-on: Nyelvek oldala - 2006.
  5. https://projects.apache.org/json/projects/maven.json
  6. Archivált másolat (a hivatkozás nem elérhető) . Letöltve: 2012. február 26. Az eredetiből archiválva : 2012. február 19..   POM
  7. Maven – Mi az a Maven? . Letöltve: 2012. február 25. Az eredetiből archiválva : 2012. február 21..
  8. Apache Maven közösség. Apache Maven fordító beépülő modul . Apache Maven Project . Hozzáférés időpontja: 2015. december 18. Az eredetiből archiválva : 2015. december 13.
  9. A Maven-verziók történeti archívuma Archiválva : 2012. február 11. a Wayback Machine -nél .
  10. A Maven 1.x hivatalos oldala Archiválva : 2012. február 15.
  11. ↑ 1 2 Apache Maven Alapítvány. Maven kiadás története . Apache Maven Docs . Letöltve: 2015. december 20. Az eredetiből archiválva : 2015. december 19..
  12. ↑ 1 2 Apache Foundations. A POM-fájlok minimális tartalma . Apache Maven Project . Letöltve: 2007. október 6. Az eredetiből archiválva : 2017. november 19..
  13. Super POM archiválva : 2017. november 19. a Wayback Machine -nál .
  14. Maven by példa archiválva 2020. szeptember 15-én a Wayback Machine -nél .
  15. Mi az Egyezmény a konfiguráció felett? . Letöltve: 2016. október 28. Az eredetiből archiválva : 2016. szeptember 14..
  16. Apache Maven Alapítvány. Maven dokumentáció. Archetípusok. . Hozzáférés időpontja: 2015. december 18. Az eredetiből archiválva : 2015. december 22.
  17. ↑ 1 2 3 Apache Maven Hivatalos oldal: Címtárszerkezet Archiválva : 2012. február 21. a Wayback Machine -nél .
  18. Maven Build Lifecycle Reference archiválva 2017. november 17-én a Wayback Machine -nél .
  19. .NET Maven Plugin archiválva : 2016. október 27. a Wayback Machine -nél .
  20. Native Maven Plugin archiválva 2016. október 29-én a Wayback Machine -nél .
  21. NAR plugin archiválva : 2017. december 20. a Wayback Machine -nél .
  22. Maven Compiler Plugin archiválva 2017. december 15-én a Wayback Machine -nél .
  23. Maven – Elérhető bővítmények archiválva : 2017. július 24. a Wayback Machine -nél .
  24. Maven Central Repository archiválva : 2020. április 26. a Wayback Machine -nél .
  25. Maven keresőmotor archiválva : 2020. április 26. a Wayback Machine -nél .
  26. Összehasonlító táblázat Archiválva : 2012. november 23.
  27. Apache Maven Alapítvány. maven dokumentáció. Bevezetés a függőségi mechanizmusba . Hozzáférés időpontja: 2015. december 18. Az eredetiből archiválva : 2015. december 20.
  28. Webprojekt konvertálása Maven projektté archiválva 2012. február 21-én a Wayback Machine -nél .
  29. Apache Alapítvány. Projekt építése a Mavennel . Apache Maven dokumentáció . Hozzáférés dátuma: 2015. december 21. Az eredetiből archiválva : 2016. január 3.
  30. EmacsWiki: Malabar Mode Archivált : 2013. november 3. a Wayback Machine -nél .

Linkek

  • Vygovsky Leonyid. Az Artifactory maven repository telepítése (2010. január 5.). — Ez a cikk részletes útmutatást ad arról, hogyan telepíthet maven tárolót egy Glassfish alkalmazáskiszolgálóra vagy egy Apache Tomcat szervlet-tárolóra. Hozzáférés: 2010. január 5. Archivált : 2012. február 29.