Apache Maven | |
---|---|
Type | Byg automatisering og pakkehåndteringssystem |
Udvikler | Apache Software Foundation |
Skrevet i | Java [3] [4] [5] |
Operativ system | på tværs af platforme |
Første udgave | 1. februar 2008 [1] |
Hardware platform | Java virtuel maskine |
nyeste version | |
Læsbare filformater | maven metadata [d] |
Genererede filformater | maven metadata [d] |
Licens | Apache-licens 2.0 |
Internet side | maven.apache.org _ |
Mediefiler på Wikimedia Commons |
Apache Maven er en ramme til automatisering af samlingen af projekter baseret på beskrivelsen af deres struktur i filer i POM ( Project Object Model ) sproget , som er en delmængde af XML [6] . Maven-projektet er udgivet af Apache Software Foundation , hvor det formelt er en del af Jakarta-projektet .
Systemets navn er et jiddisch ord , hvis betydning groft kan udtrykkes som "indsamler af viden" [7] .
Maven leverer deklarativ , ikke bydende (i modsætning til Apache Ant byggeautomatiseringsværktøj ) projektopbygning. Projektbeskrivelsesfiler indeholder projektspecifikationen, ikke individuelle udførelseskommandoer. Alle filbehandlingsopgaver beskrevet i specifikationerne håndteres af Maven gennem en række indbyggede og eksterne plugins.
Maven bruges til at bygge og administrere projekter skrevet i Java , C# , Ruby , Scala og andre sprog [8] .
Bemærkelsesværdige alternativer inkluderer Gradle automatiserede byggesystem , som er bygget på principperne fra Apache Ant og Maven, men bruger en specialiseret Groovy DSL i stedet for en POM-konfiguration.
Maven blev skabt af canadiske Jason van Zyl og Sonatype , et firma han grundlagde . Det startede som et delprojekt af Apache Turbine i 2002, og i 2003 blev Maven kvalificeret som et Apache-projekt på topniveau, samtidig med at dets første version udkom - Maven 1.x, udgivet den 13. juli 2004 som version 1.0. Dette skete dog så hurtigt, at nogle detaljer ikke blev gennemtænkt, for eksempel for meget konfiguration, ydeevneproblemer.
Derfor blev konceptet færdiggjort, og i 2005 begyndte en parallel udvikling af Maven 2.x, som blev leveret i version 2.0 den 19. oktober 2005. [9]
Maven 1.x er ikke videreudviklet og er begrænset til brugersupport og fejlrettelser. [ti]
Udviklingen af Maven 3.0 startede i 2008. Efter otte alpha-udgivelser blev den første betaversion af Maven 3.0 udgivet i oktober 2010. Der er blevet lagt særlig vægt på dens bagudkompatibilitet med Maven 2. For de fleste projekter kræver flytning fra Maven 2 til Maven 3 ingen ændringer [11] .
Maven udvikling finder sted i følgende delprojekter:
Oplysningerne til at bygge et projekt understøttet af Apache Maven er indeholdt i en XML -fil kaldet pom.xml . Ved opstart kontrollerer Maven, at konfigurationsfilen indeholder alle de nødvendige data, og at alle data er syntaktisk korrekte.
Et eksempel på pom.xml fil :
<project> <!-- modelversion for Maven 2.x POM'er er altid 4.0.0 --> <modelVersion> 4.0.0 </modelVersion> <!-- koordinater for projektet, det vil sige et sæt værdier, der giver dig mulighed for entydigt at identificere dette projekt --> <groupId> com.mycompany.app </groupId> <artifactId> my-app </artifactId> <version> 1.0 </version> <!-- biblioteksafhængigheder --> <afhængigheder> <afhængigheder> <!-- koordinater for påkrævet bibliotek --> <groupId> junit </groupId> <artifactId> junit </artifactId> <version> 3.8.1 </version> <!-- dette bibliotek bruges kun til at køre og kompilere test --> <scope> test </scope> </dependency> </dependencies> </project>Minimumskonfigurationen inkluderer versionen af konfigurationsfilen, navnet på projektet, dets forfatter og versionen [12] . Ved hjælp af pom.xml konfigureres afhængigheder af andre projekter, individuelle faser af projektets byggeproces (byggeproces), en liste over plugins , der implementerer byggerækkefølgen [12] .
Store projekter kan opdeles i flere moduler eller delprojekter med hver sin POM. Operationer på moduler kan udføres gennem en fælles root POM med en enkelt kommando.
Underprojekt POM-filer kan arve konfiguration fra andre konfigurationsfiler. Samtidig er alle konfigurationsfiler nødvendigvis arvet fra "Super POM"-filen [13] som standard. Super POM giver standardkonfiguration, såsom en standard mappestruktur, standard plugins, binding til livscyklusfaser og mere.
Maven understøtter konvention-for-konfiguration- princippet , som går ud på, at et pågældende aspekt har brug for en konfiguration, hvis og kun hvis dette aspekt ikke opfylder nogle specifikationer. Som en konsekvens reducerer dette mængden af konfiguration, der kræves uden at miste fleksibilitet. En konsekvens af dette princip er, at der ikke er behov for at specificere filstier eksplicit, hvilket forenkler indholdet af pom.xml . Imidlertid kan næsten alle de standarder, som Maven stoler på, ændres ved individuel konfiguration [14] [15] .
Maven bruger princippet om Maven arketyper (Eng. Archetypes ). En arketype er et værktøj af mønstre, som hver er defineret af et mønster eller model, i analogi med hvilke derivater skabes. [16]
Standardbiblioteksstrukturen er en af Mavens implementeringer af arketypeprincippet. Følgende struktur viser de vigtigste mapper til et Java-projekt [17] :
Livscyklussen for et maven-projekt er en liste over navngivne faser, der bestemmer rækkefølgen af handlinger, når det bygges. Mavens livscyklus indeholder tre uafhængige udførelsesordrer: [18]
Standardlivscyklusser kan forbedres med funktionalitet ved hjælp af Maven-plugins. Plugins giver dig mulighed for at indsætte nye trin i standardcyklussen (for eksempel distribution til applikationsserveren) eller udvide eksisterende trin.
Maven er baseret på en plugin - arkitektur, der giver dig mulighed for at bruge plugins til forskellige opgaver ( kompilere , teste, bygge, deploy, checkstyle, pmd, scp-transfer ) til et givet projekt, uden at skulle installere dem eksplicit. Dette er muligt på grund af det faktum, at informationen kommer til plugin'et gennem standardindgangen, og resultaterne skrives til dets standardoutput. Teoretisk giver dette enhver mulighed for at skrive plug-ins for at interagere med projektets byggeværktøjer (kompilatorer, testværktøjer og så videre) til ethvert andet sprog. I virkeligheden er understøttelse af andre sprog end Java i øjeblikket minimal. Der er et plugin til .NET frameworket [19] samt plugins til C / C++ [20] [21] .
Antallet af tilgængelige plugins er i øjeblikket meget stort og omfatter blandt andet plugins, der giver dig mulighed for at køre en webapplikation direkte fra Maven for at teste den i en browser; plugins, der giver dig mulighed for at teste eller oprette databanker; plugins, der giver dig mulighed for at generere webtjenester. Udviklerens opgave i en sådan situation er at finde og anvende det mest passende sæt plug-ins.
Pluginnet opnår en række mål med følgende syntaks:
mvn [pluginnavn]:[målnavn]For eksempel kan et Java-projekt kompileres med et compiler-plugin [22] ved at udføre kommandoen mvn compiler:compile.
Der er Maven-plugins til bygning, test, kildekontrol, drift af en webserver, generering af Eclipse - projektfiler og mere. [23] Plugins er listet og konfigureret i en sektion af pom.xml<plugins> -filen . Nogle grundlæggende grupper af plugins er inkluderet i hvert projekt som standard.
Filen pom.xml specificerer de afhængigheder, som et Maven-administreret projekt har. Afhængighedslederen er baseret på flere kerneprincipper:
Et afhængighedsomfang giver dig mulighed for kun at inkludere afhængigheder på et bestemt trin af projektopbygningen. Der er 6 mulige områder [27] :
Et projekt, der vedligeholdes med Maven, skal opfylde visse betingelser for at kunne læses af hjælpeprogrammet, analyseres og bygges. Dette pålægger nogle begrænsninger for biblioteksstrukturen og kræver yderligere trin, hvis projektet oprindeligt har en anden struktur. [28]
For at Maven kan genkende et projekt som under behandling, skal det indeholde en etableret mappestruktur. Alle kildekodefiler skal være placeret i den relative sti " \src\main\java " [17] .
Webprojektets konfigurationsfil web.xml skal være placeret i mappen \src\main\webapp\WEB-INF [17 ] .
Pom.xml- konfigurationsfilen for et Maven-projekt skal være placeret i projektets rodbibliotek. Ifølge dets formål kan det indeholde et fjernlager, plugins til oprettelse af arkiver, et kompileringsplugin og så videre. Webprojektet skal også tilføje yderligere afhængigheder, såsom javaee.jar.
Så output-webprojektets konfigurationsfil, i overensstemmelse med Maven, ser sådan ud:
<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/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 alle ovenstående krav er opfyldt, er Maven-projektet klar til at udføre livscyklusfaser såsom kompilering, arkivopbygning og dokumentationsgenerering [29] .
Et eksempel på outputloggen af meddelelser, når kommandoen udføres mvn war:war:
E:\workspace\servletdemo>mvnwar:war [INFO] Scanner efter projekter... ....... [INFO] Behandling af krigsprojekt [INFO] Kopiering af webapp-ressourcer[E:\workspace\servletdemo] [INFO] Webapp samlet på[47 msek.] [INFO] Building war: E:\workspace\servletdemo\target\servletdemo-1.0-SNAPSHOT.war [INFO]------------------------------------------------------- ----- [INFO] BYGGER SUCCES [INFO]------------------------------------------------------- -----For nogle IDE'er leverer Maven plugins, der giver dig mulighed for at styre livscyklussen ved at udføre kommandoer ved hjælp af IDE-grænsefladen. Listen over sådanne udviklingsmiljøer inkluderer Eclipse (via M2eclipse plugin ), IntelliJ IDEA , NetBeans , JBuilder , JDeveloper (version 11.1.2), MyEclipse, Emacs [30]
Disse plugins giver også mulighed for bekvemt at redigere POM'en eller bruge POM'en til fuldt ud at beskrive projektets afhængigheder for behovene for den IDE, du bruger.
I sociale netværk | |
---|---|
Tematiske steder |
Apache Software Foundation | |||||||
---|---|---|---|---|---|---|---|
Projekter på topniveau |
| ||||||
Delprojekter |
| ||||||
Apache Web |
| ||||||
Andre projekter | |||||||
Udvikling af projekter ( inkubator ) |
| ||||||
Nedlagte projekter ( loftsrum ) | |||||||
|
Monteringsautomatiseringssystemer | |
---|---|