Apache Maven | |
---|---|
Sorts | Bygg automation och pakethanteringssystem |
Utvecklaren | Apache Software Foundation |
Skrivet i | Java [3] [4] [5] |
Operativ system | plattformsoberoende |
Första upplagan | 1 februari 2008 [1] |
Hårdvaruplattform | Java Virtual Machine |
senaste versionen | |
Läsbara filformat | maven metadata [d] |
Genererade filformat | maven metadata [d] |
Licens | Apache-licens 2.0 |
Hemsida | maven.apache.org _ |
Mediafiler på Wikimedia Commons |
Apache Maven är ett ramverk för att automatisera sammansättningen av projekt baserat på beskrivningen av deras struktur i filer i språket POM ( Project Object Model ) , som är en delmängd av XML [6] . Maven-projektet publiceras av Apache Software Foundation , där det formellt är en del av Jakarta-projektet .
Namnet på systemet är ett jiddisch ord , vars betydelse grovt kan uttryckas som "insamlare av kunskap" [7] .
Maven tillhandahåller deklarativ , inte imperativ (till skillnad från Apache Ant byggautomatiseringsverktyg ) projektuppbyggnad. Projektbeskrivningsfiler innehåller projektspecifikationen, inte enskilda exekveringskommandon. Alla filbearbetningsuppgifter som beskrivs i specifikationen hanteras av Maven genom en serie inbyggda och externa plugins.
Maven används för att bygga och hantera projekt skrivna i Java , C# , Ruby , Scala och andra språk [8] .
Anmärkningsvärda alternativ inkluderar Gradle automatiserade byggsystem , som är byggt på principerna för Apache Ant och Maven, men använder en specialiserad Groovy DSL istället för en POM-konfiguration.
Maven skapades av kanadensaren Jason van Zyl och Sonatype , ett företag som han grundade . Det började som ett delprojekt till Apache Turbine 2002, och 2003 kvalificerades Maven som ett Apache-projekt på toppnivå, samtidigt som dess första version dök upp - Maven 1.x, publicerad den 13 juli 2004 som version 1.0. Detta hände dock så snabbt att vissa detaljer inte var genomtänkta, till exempel för mycket konfiguration, prestandaproblem.
Därför färdigställdes konceptet och 2005 påbörjades parallell utveckling av Maven 2.x, som levererades i version 2.0 den 19 oktober 2005. [9]
Maven 1.x är inte vidareutvecklad och är begränsad till användarsupport och buggfixar. [tio]
Utvecklingen av Maven 3.0 startade 2008. Efter åtta alfautgåvor publicerades den första betaversionen av Maven 3.0 i oktober 2010. Särskild uppmärksamhet har ägnats åt dess bakåtkompatibilitet med Maven 2. För de flesta projekt krävs inga ändringar för att flytta från Maven 2 till Maven 3 [11] .
Maven-utveckling sker i följande delprojekt:
Informationen för att bygga ett projekt som stöds av Apache Maven finns i en XML -fil som heter pom.xml . Vid uppstart kontrollerar Maven att konfigurationsfilen innehåller all nödvändig data och att all data är syntaktisk korrekt.
Ett exempel på pom.xml -fil :
<project> <!-- modellversion för Maven 2.x POM är alltid 4.0.0 --> <modelVersion> 4.0.0 </modelVersion> <!-- koordinater för projektet, det vill säga en uppsättning värden som låter dig identifiera detta projekt unikt --> <groupId> com.mycompany.app </groupId> <artifactId> my-app </artifactId> <version> 1.0 </version> <!-- biblioteksberoenden --> <beroenden> <beroenden> <!-- koordinater för obligatoriskt bibliotek --> <groupId> junit </groupId> <artifactId> junit </artifactId> <version> 3.8.1 </version> <!-- detta bibliotek används endast för att köra och kompilera tester --> <scope> test </scope> </dependency> </dependencies> </project>Minimikonfigurationen inkluderar versionen av konfigurationsfilen, projektets namn, dess författare och versionen [12] . Med hjälp av pom.xml konfigureras beroenden av andra projekt, individuella faser av projektets byggprocess (byggprocessen), en lista med plugins som implementerar byggordningen [12] .
Stora projekt kan delas upp i flera moduler, eller delprojekt, var och en med sin egen POM. Operationer på moduler kan utföras genom en gemensam rot-POM med ett enda kommando.
Delprojekt POM-filer kan ärva konfiguration från andra konfigurationsfiler. Samtidigt ärvs alla konfigurationsfiler nödvändigtvis från "Super POM"-filen [13] som standard. Super POM tillhandahåller standardkonfiguration, såsom en standardkatalogstruktur, standardinsticksprogram, bindning till livscykelfaser och mer.
Maven stöder principen konvention-för-konfiguration , vilket innebär att en aspekt i fråga behöver en konfiguration om och endast om den aspekten inte uppfyller någon specifikation. Som en konsekvens minskar detta mängden konfiguration som krävs utan att förlora flexibilitet. En konsekvens av denna princip är att det inte finns något behov av att ange filsökvägar explicit, vilket förenklar innehållet i pom.xml . Men nästan alla standarder som Maven förlitar sig på kan ändras genom individuell konfiguration [14] [15] .
Maven använder principen om Maven-arketyper (Eng. Archetypes ). En arketyp är ett verktyg av mönster, som vart och ett definieras av ett mönster eller modell, i analogi med vilka derivator skapas. [16]
Standardkatalogstrukturen är en av Mavens implementeringar av arketypprincipen. Följande struktur visar de viktigaste katalogerna för ett Java-projekt [17] :
Livscykeln för ett maven-projekt är en lista med namngivna faser som bestämmer ordningen på åtgärder när det byggs. Mavens livscykel innehåller tre oberoende exekveringsorder: [18]
Standardlivscykler kan förbättras med funktionalitet med Maven-plugins. Plugins låter dig infoga nya steg i standardcykeln (till exempel distribution till applikationsservern) eller utöka befintliga steg.
Maven är baserad på en plugin- arkitektur som låter dig använda plugins för olika uppgifter ( kompilera , testa, bygga, distribuera, checkstyle, pmd, scp-transfer ) för ett givet projekt, utan att explicit behöva installera dem. Detta är möjligt på grund av det faktum att informationen kommer till plugin via standardingången, och resultaten skrivs till dess standardutgång. Teoretiskt tillåter detta vem som helst att skriva plugin-program för att interagera med projektets byggverktyg (kompilatorer, testverktyg och så vidare) för vilket annat språk som helst. I verkligheten är stödet för andra språk än Java för närvarande minimalt. Det finns en plugin för .NET-ramverket [19] samt plugins för C / C++ [20] [21] .
Antalet tillgängliga plugins är för närvarande mycket stort och inkluderar bland annat plugins som låter dig köra en webbapplikation direkt från Maven för att testa den i en webbläsare; plugins som låter dig testa eller skapa databanker; plugins som låter dig skapa webbtjänster. Utvecklarens uppgift i en sådan situation är att hitta och använda den mest lämpliga uppsättningen av plugin-program.
Pluginet uppnår ett antal mål med följande syntax:
mvn [pluginnamn]:[målnamn]Till exempel kan ett Java-projekt kompileras med en kompilatorplugin [22] genom att utföra kommandot mvn compiler:compile.
Det finns Maven-plugins för att bygga, testa, kontrollera källkod, köra en webbserver, generera Eclipse - projektfiler och mer. [23] Plugins listas och konfigureras i en del av <plugins>filen pom.xml . Vissa grundläggande grupper av plugins ingår i varje projekt som standard.
Filen pom.xml anger de beroenden som ett Maven-hanterat projekt har. Beroendehanteraren bygger på flera kärnprinciper:
En beroendeomfattning låter dig inkludera beroenden endast i ett visst skede av projektuppbyggnaden. Det finns 6 möjliga områden [27] :
Ett projekt som underhålls med Maven måste uppfylla vissa villkor för att kunna läsas av verktyget, analyseras och byggas. Detta medför vissa begränsningar för katalogstrukturen och kräver ytterligare steg om projektet initialt har en annan struktur. [28]
För att Maven ska känna igen ett projekt som bearbetat måste det innehålla en etablerad katalogstruktur. Alla källkodsfiler måste finnas i den relativa sökvägen " \src\main\java " [17] .
Webbprojektets konfigurationsfil web.xml måste finnas i katalogen \src\main\webapp\WEB-INF [17 ] .
Pom.xml- konfigurationsfilen för ett Maven-projekt måste finnas i projektets rotkatalog. Enligt dess syfte kan den innehålla ett fjärrlager, plugins för att skapa arkiv, en kompilatorplugin och så vidare. Webbprojektet behöver också lägga till ytterligare beroenden, såsom javaee.jar.
Så konfigurationsfilen för utgående webbprojekt, i överensstämmelse med Maven, ser ut så här:
<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> <resurs> <katalog> ${basedir }/src/main/java </directory> <targetPath> WEB-INF/klasser </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>När alla ovanstående krav har uppfyllts är Maven-projektet redo att utföra livscykelfaser som kompilering, arkivbygge och dokumentationsgenerering [29] .
Ett exempel på utdataloggen för meddelanden när du kör kommandot mvn war:war:
E:\workspace\servletdemo>mvnwar:war [INFO] Söker efter projekt... ....... [INFO] Bearbetar krigsprojekt [INFO] Kopiera webbappsresurser[E:\workspace\servletdemo] [INFO] Webbapp samlad på [47 ms] [INFO] Building war: E:\workspace\servletdemo\target\servletdemo-1.0-SNAPSHOT.war [INFO]----------------------------------------------- ----- [INFO] BYGGNAD [INFO]----------------------------------------------- -----För vissa IDE :er tillhandahåller Maven plugins som låter dig hantera livscykeln genom att utföra kommandon med hjälp av IDE-gränssnittet. Listan över sådana utvecklingsmiljöer inkluderar Eclipse (via M2eclipse plugin ), IntelliJ IDEA , NetBeans , JBuilder , JDeveloper (version 11.1.2), MyEclipse, Emacs [30]
Dessa plugins ger också möjligheten att bekvämt redigera POM eller använda POM för att fullständigt beskriva projektets beroenden för behoven hos den IDE du använder.
![]() | |
---|---|
Tematiska platser |
Apache Software Foundation | |||||||
---|---|---|---|---|---|---|---|
Projekt på högsta nivå |
| ||||||
Delprojekt |
| ||||||
Apache |
| ||||||
Andra projekt | |||||||
Utveckla projekt ( inkubator ) |
| ||||||
Avvecklade projekt ( Attic ) | |||||||
|
Monteringsautomationssystem | |
---|---|