Apache Maven | |
---|---|
Typ | Vybudujte automatizaci a systém správy balíků |
Vývojář | Apache Software Foundation |
Zapsáno v | Java [3] [4] [5] |
Operační systém | multiplatformní |
První vydání | 1. února 2008 [1] |
Hardwarová platforma | Java virtuální stroj |
Nejnovější verze | |
Čitelné formáty souborů | metadata maven [d] |
Vygenerované formáty souborů | metadata maven [d] |
Licence | Licence Apache 2.0 |
webová stránka | maven.apache.org _ |
Mediální soubory na Wikimedia Commons |
Apache Maven je framework pro automatizaci sestavování projektů na základě popisu jejich struktury v souborech v jazyce POM ( Project Object Model ) , který je podmnožinou XML [6] . Projekt Maven je publikován nadací Apache Software Foundation , kde je formálně součástí Jakartského projektu .
Název systému je slovo v jidiš , jehož význam lze zhruba vyjádřit jako „sběratel znalostí“ [7] .
Maven poskytuje deklarativní , nikoli imperativní (na rozdíl od nástroje pro automatizaci sestavení Apache Ant ) sestavení projektu. Soubory popisu projektu obsahují specifikaci projektu, nikoli jednotlivé prováděcí příkazy. Všechny úlohy zpracování souborů popsané ve specifikaci zpracovává Maven prostřednictvím řady vestavěných a externích pluginů.
Maven se používá k vytváření a správě projektů napsaných v jazycích Java , C# , Ruby , Scala a dalších [8] .
Mezi pozoruhodné alternativy patří systém automatického sestavení Gradle , který je postaven na principech Apache Ant a Maven, ale místo konfigurace POM používá specializované Groovy DSL.
Maven byl vytvořen Kanaďanem Jasonem van Zylem a firmou Sonatype , kterou založil . Začalo to jako podprojekt Apache Turbine v roce 2002 a v roce 2003 byl Maven kvalifikován jako projekt Apache nejvyšší úrovně, zároveň se objevila jeho první verze - Maven 1.x, publikovaná 13. července 2004 jako verze 1.0. Stalo se to však tak rychle, že některé detaily nebyly promyšleny, například příliš mnoho konfigurace, problémy s výkonem.
Proto byl koncept dopracován a v roce 2005 začal paralelní vývoj Maven 2.x, který byl ve verzi 2.0 dodán 19. října 2005. [9]
Maven 1.x není dále vyvíjen a je omezen na uživatelskou podporu a opravy chyb. [deset]
Vývoj Maven 3.0 začal v roce 2008. Po osmi vydáních alfa byla v říjnu 2010 zveřejněna první beta verze Maven 3.0. Zvláštní pozornost byla věnována jeho zpětné kompatibilitě s Maven 2. U většiny projektů nevyžaduje přechod z Maven 2 na Maven 3 žádné změny [11] .
Vývoj Maven probíhá v následujících dílčích projektech:
Informace pro vytvoření projektu podporovaného Apache Maven jsou obsaženy v souboru XML s názvem pom.xml . Při spuštění Maven zkontroluje, zda konfigurační soubor obsahuje všechna požadovaná data a zda jsou všechna data syntakticky správná.
Příklad souboru pom.xml :
<project> <!-- verze modelu pro Maven 2.x POM je vždy 4.0.0 --> <modelVersion> 4.0.0 </modelVersion> <!-- souřadnice projektu, tedy sada hodnot, která vám umožňuje jednoznačně identifikovat tento projekt --> <groupId> com.mycompany.app </groupId> <artifactId> moje aplikace </artifactId> <version> 1.0 </version> <!-- knihovny závislostí --> <dependencies> <dependencies> <!-- souřadnice požadované knihovny --> <groupId> junit < /groupId> <artifactId> junit </artifactId> <version> 3.8.1 </version> <!-- tato knihovna se používá pouze ke spouštění a kompilaci testů --> <scope> test </scope> </dependency> </dependencies> </project>Minimální konfigurace obsahuje verzi konfiguračního souboru, název projektu, jeho autora a verzi [12] . Pomocí pom.xml se konfigurují závislosti na jiných projektech, jednotlivé fáze procesu sestavení projektu (proces sestavení), seznam pluginů , které implementují pořadí sestavení [12] .
Velké projekty lze rozdělit do několika modulů nebo podprojektů, z nichž každý má svůj vlastní POM. Operace na modulech lze provádět prostřednictvím společného kořenového POM pomocí jediného příkazu.
Soubory POM dílčího projektu mohou zdědit konfiguraci z jiných konfiguračních souborů. Současně jsou všechny konfigurační soubory ve výchozím nastavení nutně zděděny ze souboru "Super POM" [13] . Super POM poskytuje výchozí konfiguraci, jako je výchozí adresářová struktura, výchozí pluginy, vazba na fáze životního cyklu a další.
Maven podporuje princip konvence po konfiguraci , což je, že daný aspekt potřebuje konfiguraci tehdy a pouze tehdy, když tento aspekt nesplňuje nějakou specifikaci. V důsledku toho se snižuje množství požadované konfigurace bez ztráty flexibility. Jedním z důsledků tohoto principu je, že není potřeba explicitně specifikovat cesty k souboru, což zjednodušuje obsah souboru pom.xml . Téměř všechny standardy, na které se Maven opírá, však lze změnit individuální konfigurací [14] [15] .
Maven využívá princip mavenských archetypů (angl. Archetypes ). Archetyp je nástroj vzorů, z nichž každý je definován vzorem nebo modelem, analogicky se kterými se vytvářejí deriváty. [16]
Výchozí adresářová struktura je jednou z Mavenových implementací principu archetypu. Následující struktura ukazuje nejdůležitější adresáře pro projekt Java [17] :
Životní cyklus maven projektu je seznam pojmenovaných fází, které určují pořadí akcí při jeho budování. Životní cyklus Maven obsahuje tři nezávislé prováděcí příkazy: [18]
Standardní životní cykly lze vylepšit funkčností pomocí zásuvných modulů Maven. Pluginy umožňují vkládat nové kroky do standardního cyklu (například distribuce na aplikační server) nebo rozšiřovat stávající kroky.
Maven je založen na architektuře pluginů , která vám umožňuje používat pluginy pro různé úlohy ( kompilace , test, sestavení, nasazení, checkstyle, pmd, scp-transfer ) pro daný projekt, aniž byste je museli explicitně instalovat. To je možné díky skutečnosti, že informace přicházejí do pluginu přes standardní vstup a výsledky jsou zapisovány na jeho standardní výstup. Teoreticky to umožňuje komukoli psát zásuvné moduly pro interakci s nástroji pro sestavení projektu (kompilátory, testovací nástroje a tak dále) pro jakýkoli jiný jazyk. Ve skutečnosti je podpora jiných jazyků než Java v současnosti minimální. Existuje plugin pro .NET framework [19] a také pluginy pro C / C++ [20] [21] .
Počet dostupných pluginů je v současné době velmi velký a zahrnuje mimo jiné pluginy, které umožňují spustit webovou aplikaci přímo z Mavenu a otestovat ji v prohlížeči; pluginy, které umožňují testovat nebo vytvářet databanky; pluginy, které umožňují generovat webové služby. Úkolem vývojáře v takové situaci je najít a aplikovat nejvhodnější sadu plug-inů.
Plugin dosahuje řady cílů s následující syntaxí:
mvn [název pluginu]:[cílové jméno]Například projekt Java lze zkompilovat pomocí kompilátorového pluginu [22] spuštěním příkazu mvn compiler:compile.
Existují pluginy Maven pro vytváření, testování, ovládání zdroje, provozování webového serveru, generování souborů projektu Eclipse a další. [23] Pluginy jsou uvedeny a konfigurovány v části <plugins>souboru pom.xml . V každém projektu je standardně zahrnuta některá základní skupina pluginů.
Soubor pom.xml určuje závislosti, které má projekt spravovaný Mavenem. Správce závislostí je založen na několika základních principech:
Rozsah závislostí vám umožňuje zahrnout závislosti pouze v určité fázi vytváření projektu. Existuje 6 možných oblastí [27] :
Projekt udržovaný pomocí Maven musí splňovat určité podmínky, aby byl čitelný pro nástroj, analyzoval a sestavoval. To ukládá určitá omezení na strukturu adresářů a vyžaduje další kroky, pokud má projekt zpočátku jinou strukturu. [28]
Aby Maven rozpoznal projekt jako zpracovávaný, musí obsahovat zavedenou adresářovou strukturu. Všechny soubory zdrojového kódu musí být umístěny v relativní cestě " \src\main\java " [17] .
Konfigurační soubor webového projektu web.xml musí být umístěn v adresáři \src\main\webapp\WEB-INF [17 ] .
Konfigurační soubor pom.xml projektu Maven musí být umístěn v kořenovém adresáři projektu. Podle účelu může obsahovat vzdálené úložiště, pluginy pro vytváření archivů, plugin kompilátoru a tak dále. Webový projekt také potřebuje přidat další závislosti, jako je javaee.jar.
Takže výstupní konfigurační soubor webového projektu, konzistentní s Maven, vypadá takto:
<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> <packaging> war </packaging> <version> 1.0-SNAPSHOT </version> <name> servletdemo </name> <url> http://maven.apache.org </url> <repositories> <repository> <id> java.net </id> <url> http://download.java.net/maven/2 </url> </repository> </repositories> <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>Jakmile budou splněny všechny výše uvedené požadavky, je projekt Maven připraven provést fáze životního cyklu, jako je kompilace, sestavení archivu a generování dokumentace [29] .
Příklad výstupního protokolu zpráv při provádění příkazu mvn war:war:
E:\workspace\servletdemo>mvnwar:war [INFO] Vyhledávání projektů... ........ [INFO] Zpracování válečného projektu [INFO] Kopírování prostředků webové aplikace[E:\workspace\servletdemo] [INFO] Webapp sestavena za [47 ms] [INFO] Válka budov: E:\workspace\servletdemo\target\servletdemo-1.0-SNAPSHOT.war [INFO]----------------------------------------------- ----- [INFO] STAVBA ÚSPĚŠNÁ [INFO]----------------------------------------------- -----Pro některá IDE poskytuje Maven zásuvné moduly, které vám umožňují spravovat životní cyklus prováděním příkazů pomocí rozhraní IDE. Seznam takových vývojových prostředí zahrnuje Eclipse (prostřednictvím pluginu M2eclipse ), IntelliJ IDEA , NetBeans , JBuilder , JDeveloper (verze 11.1.2), MyEclipse, Emacs [30]
Tyto pluginy také poskytují možnost pohodlně upravovat POM nebo používat POM k úplnému popisu závislostí projektu pro potřeby IDE, které používáte.
![]() | |
---|---|
Tematické stránky |
Apache Software Foundation | |||||||
---|---|---|---|---|---|---|---|
Projekty nejvyšší úrovně |
| ||||||
Podprojekty |
| ||||||
Webové |
| ||||||
Jiné projekty | |||||||
Rozvojové projekty ( Inkubátor ) |
| ||||||
Vyřazené projekty ( podkroví ) | |||||||
|
Montážní automatizační systémy | |
---|---|