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 Java , C# , Ruby , Scala é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.
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:
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.
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] .
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] :
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]
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.
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ó.
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:
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] :
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]------------------------------------------------ -----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.
A közösségi hálózatokon | |
---|---|
Tematikus oldalak |
Apache Software Foundation | |||||||
---|---|---|---|---|---|---|---|
Legfelső szintű projektek |
| ||||||
Alprojektek |
| ||||||
Apache |
| ||||||
Egyéb projektek | |||||||
Fejlesztő projektek ( inkubátor ) |
| ||||||
Leszerelt projektek ( tetőtér ) | |||||||
|
Szerelési automatizálási rendszerek | |
---|---|