Apache Maven

Apache Maven
Tyyppi Rakenna automaatio- ja paketinhallintajärjestelmä
Kehittäjä Apache Software Foundation
Sisään kirjoitettu Java [3] [4] [5]
Käyttöjärjestelmä cross-platform
Ensimmäinen painos 1. helmikuuta 2008 [1]
Laitteistoalusta Java-virtuaalikone
uusin versio
Luettavat tiedostomuodot maven metatiedot [d]
Luodut tiedostomuodot maven metatiedot [d]
Lisenssi Apache-lisenssi 2.0
Verkkosivusto maven.apache.org
 Mediatiedostot Wikimedia Commonsissa

Apache Maven  on kehys projektien kokoamisen automatisoimiseksi perustuen niiden rakenteen kuvaukseen tiedostoissa POM ( Project Object Model ) -kielellä ,  joka on XML :n osajoukko [6] . Maven-projektin on julkaissut Apache Software Foundation , jossa se on virallisesti osa Jakarta-projektia .

Järjestelmän nimi on jiddishinkielinen sana , jonka merkitys voidaan ilmaista karkeasti sanalla "tiedon kerääjä" [7] .

Maven tarjoaa deklaratiivisen , ei pakollisen (toisin kuin Apache Ant -koontiautomaatiotyökalun ) projektikoonnoksen. Projektin kuvaustiedostot sisältävät projektin tiedot, eivät yksittäisiä suorituskomentoja. Maven hoitaa kaikki teknisissä tiedoissa kuvatut tiedostojen käsittelytehtävät sisäisten ja ulkoisten lisäosien avulla.

Mavenia käytetään Java-C# -,  Ruby-Scala- ja muilla kielillä kirjoitettujen projektien rakentamiseen ja hallintaan [8] .

Huomattavia vaihtoehtoja ovat Gradle automatisoitu rakennusjärjestelmä , joka on rakennettu Apache Ant ja Mavenin periaatteille, mutta käyttää erikoistunutta Groovy DSL:ää POM-kokoonpanon sijaan.

Kehityshistoria

Mavenin loivat kanadalainen Jason van Zyl ja hänen perustamansa yritys Sonatype . Se alkoi Apache Turbinen aliprojektina vuonna 2002, ja vuonna 2003 Maven hyväksyttiin huipputason Apache-projektiksi, samalla kun sen ensimmäinen versio ilmestyi - Maven 1.x, julkaistu 13. heinäkuuta 2004 versiona 1.0. Tämä tapahtui kuitenkin niin nopeasti, että joitain yksityiskohtia ei mietitty, esimerkiksi liian paljon konfiguraatioita, suorituskykyongelmia.

Siksi konsepti viimeisteltiin ja vuonna 2005 aloitettiin Maven 2.x:n rinnakkaiskehitys, joka toimitettiin versiossa 2.0 19. lokakuuta 2005. [9]

Maven 1.x:ää ei ole kehitetty edelleen, ja se on rajoitettu käyttäjätukeen ja virheenkorjauksiin. [kymmenen]

Maven 3.0:n kehitys alkoi vuonna 2008. Kahdeksan alfajulkaisun jälkeen Maven 3.0:n ensimmäinen beta-versio julkaistiin lokakuussa 2010. Erityistä huomiota on kiinnitetty sen taaksepäin yhteensopivuuteen Maven 2:n kanssa. Useimmissa projekteissa siirtyminen Maven 2:sta Maven 3:een ei vaadi muutoksia [11] .

Maven-kehitys tapahtuu seuraavissa osaprojekteissa:

Projektin kuvaus Objektimalli

Apache Mavenin tukeman projektin rakentamiseen tarvittavat tiedot sisältyvät pom.xml -nimiseen XML - tiedostoon . Käynnistyksen yhteydessä Maven tarkistaa, että asetustiedosto sisältää kaikki vaaditut tiedot ja että kaikki tiedot ovat syntaktisesti oikein.

Esimerkki pom.xml- tiedostosta :

<projekti> <!-- malliversio Maven 2.x POM:ille on aina 4.0.0 --> <modelVersion> 4.0.0 </modelVersion> <!-- projektin koordinaatit, eli joukko arvoja, joiden avulla voit yksilöidä tämän projektin --> <groupId> com.mycompany.app </groupId> <artifactId> oma sovellus </artifactId> <version> 1.0 </version> <!-- kirjastoriippuvuudet --> <riippuvuudet> <riippuvuudet> <!-- vaaditun kirjaston koordinaatit --> <groupId> junit </groupId> <artifactId> junit </artifactId> <version> 3.8.1 </version> <!-- tätä kirjastoa käytetään vain testien suorittamiseen ja kääntämiseen --> <scope> testi </scope> </dependency> </dependencies> </project>

Vähimmäiskokoonpano sisältää konfigurointitiedoston version, projektin nimen, sen tekijän ja version [12] . Pom.xml :n avulla määritetään riippuvuudet muista projekteista, projektin rakennusprosessin yksittäiset vaiheet (koontiprosessi), luettelo koontimääräyksen toteuttavista laajennuksista [ 12] .

Suuret projektit voidaan jakaa useisiin moduuleihin tai aliprojekteihin, joista jokaisella on oma POM. Moduulien toiminnot voidaan suorittaa yhteisen juuri-POM:n kautta yhdellä komennolla.

Aliprojektin POM-tiedostot voivat periä määritykset muista määritystiedostoista. Samaan aikaan kaikki konfigurointitiedostot peritään oletusarvoisesti "Super POM" -tiedostosta [13] . Super POM tarjoaa oletuskonfiguraation, kuten oletushakemistorakenteen, oletuslaajennukset, sitomisen elinkaarivaiheisiin ja paljon muuta.

Peruskäsitteet

Konfigurointikäytännöt

Maven tukee käytäntö konfiguraatiolta -periaatetta , joka tarkoittaa, että kyseinen aspekti tarvitsee konfiguroinnin, jos ja vain, jos se ei täytä jotakin spesifikaatiota. Tämän seurauksena tämä vähentää tarvittavan konfiguroinnin määrää menettämättä joustavuutta. Yksi seuraus tästä periaatteesta on, että tiedostopolkuja ei tarvitse erikseen määrittää, mikä yksinkertaistaa pom.xml -tiedoston sisältöä . Kuitenkin lähes kaikki standardit, joihin Maven luottaa, voidaan muuttaa yksilöllisesti [14] [15] .

Arkkityypit

Maven käyttää Mavenin arkkityyppien periaatetta (eng. Archetypes ). Arkkityyppi on työkalu kuvioista, joista jokainen määritellään kuviolla tai mallilla, analogisesti jonka kanssa johdannaisia ​​luodaan. [16]

Oletushakemistorakenne on yksi Mavenin arkkityyppiperiaatteen toteutuksista. Seuraava rakenne näyttää Java-projektin tärkeimmät hakemistot [17] :

  • Projektin juurihakemisto : pom.xml- tiedosto ja kaikki muut alihakemistot
    • src : kaikki lähdetiedostot
      • src/main : itse tuotteen lähdetiedostot
        • src/main/java : Java- lähde
        • src/main/resources : muut tiedostot, joita käytetään kääntämisen tai suorituksen aikana, kuten ominaisuustiedostot
      • src/test : lähdetiedostot, joita tarvitaan automaattisen testauksen määrittämiseen
        • src/test/java : JUnit -testitapaukset automaattista testausta varten
    • kohde : kaikki Mavenin työn aikana luodut tiedostot
      • kohde/luokat : käännetyt Java-luokat

Elinkaari

Maven-projektin elinkaari on lista nimetyistä vaiheista, joka määrittää toimintojen järjestyksen sitä rakennettaessa. Mavenin elinkaari sisältää kolme itsenäistä suoritusmääräystä: [18]

  • puhdas - elinkaari projektin puhdistamiseen. Sisältää seuraavat vaiheet:
    1. esipuhdistettu
    2. puhdas
    3. viesti siististi
  • oletus on pääelinkaari, joka sisältää seuraavat vaiheet:
    1. validoi - tarkistaa, onko projektin rakenne täydellinen ja oikea.
    2. tuottaa-lähteitä
    3. prosessin lähteet
    4. tuottaa-resursseja
    5. prosessiresursseja
    6. käännä - lähteet kootaan.
    7. prosessi-testi-lähteet
    8. prosessi-testi-resurssit
    9. testikokonaisuus
    10. testi - koottu koodi testataan ennalta valmistetulla testisarjalla.
    11. paketti - koottujen luokkien ja muiden resurssien pakkaus. Esimerkiksi JAR-tiedostossa.
    12. integraatiotesti - ohjelmisto kokonaisuudessaan tai sen suuret moduulit joutuvat integrointitestaukseen. Ohjelmistotuotteen komponenttien välinen vuorovaikutus tarkistetaan.
    13. asenna - asenna ohjelmisto paikalliseen Maven-tietovarastoon, jotta se on saatavilla nykyisen käyttäjän muille projekteille.
    14. käyttöönotto - Ohjelmiston vakaa versio jaetaan Maven-etävarastoon, jotta se on muiden käyttäjien käytettävissä.
  • sivusto - projektidokumentaation luomisen elinkaari. Koostuu vaiheista:
    1. ennen sivustoa
    2. sivusto
    3. postaussivusto
    4. sivuston käyttöönotto

Vakioelinkaaria voidaan parantaa toiminnallisuudella Maven-laajennusten avulla. Lisäosien avulla voit lisätä uusia vaiheita vakiojaksoon (esimerkiksi jakelu sovelluspalvelimelle) tai laajentaa olemassa olevia vaiheita.

Arkkitehtuuri

Maven perustuu laajennusarkkitehtuuriin , jonka avulla voit käyttää laajennuksia erilaisiin tehtäviin ( kääntää ,  testata, rakentaa, ottaa käyttöön, checkstyle, pmd, scp-siirto ) tietylle projektille ilman, että niitä tarvitsee erikseen asentaa. Tämä on mahdollista, koska tiedot tulevat laajennukseen vakiotulon kautta ja tulokset kirjoitetaan sen vakiolähtöön. Teoriassa tämä mahdollistaa sen, että kuka tahansa voi kirjoittaa laajennuksia ollakseen vuorovaikutuksessa projektin rakennustyökalujen (kääntäjät, testityökalut ja niin edelleen) kanssa mille tahansa muulle kielelle. Todellisuudessa muiden kielten kuin Javan tuki on tällä hetkellä vähäistä. On olemassa laajennus .NET-kehystä varten [19] sekä laajennuksia C / C++ :lle [20] [21] .

Saatavilla olevien liitännäisten määrä on tällä hetkellä erittäin suuri ja sisältää muun muassa laajennuksia, joiden avulla voit suorittaa verkkosovelluksen suoraan Mavenista testataksesi sitä selaimessa; laajennukset, joiden avulla voit testata tai luoda tietopankkeja; laajennuksia, joiden avulla voit luoda verkkopalveluita. Kehittäjän tehtävänä tällaisessa tilanteessa on löytää ja ottaa käyttöön sopivin joukko laajennuksia.

Laajennus saavuttaa useita tavoitteita seuraavalla syntaksilla:

mvn [laajennuksen nimi]:[kohteen nimi]

Esimerkiksi Java-projekti voidaan kääntää kääntäjälisäosalla [22] suorittamalla komento mvn compiler:compile.

On Maven-laajennuksia rakentamiseen, testaamiseen, lähteen hallintaan, verkkopalvelimen käyttämiseen, Eclipse - projektitiedostojen luomiseen ja muuhun. [23] Lisäosat on lueteltu ja määritetty pom.xml-<plugins> tiedoston osassa . Jotkin peruslaajennukset sisältyvät oletusarvoisesti jokaiseen projektiin.

Riippuvuudet

Pom.xml - tiedosto määrittää riippuvuudet, jotka Mavenin hallinnoimalla projektilla on. Riippuvuuspäällikkö perustuu useisiin perusperiaatteisiin:

  • Tietovarastot. Maven etsii tarvittavat tiedostot paikallisista hakemistoista tai paikallisesta maven-arkistosta. Jos riippuvuutta ei voida ratkaista paikallisesti, Maven muodostaa yhteyden määritettyyn maven-tietovarastoon verkossa ja kopioi paikalliseen arkistoon. Maven käyttää oletuksena Maven Central Repositorya [24] , mutta kehittäjä voi määrittää muita julkisia Maven-arkistoja, kuten Apache, Ibiblio, Codehaus tai Java.Net.
  • transitiiviset riippuvuudet. Tarvittavat kirjastot ladataan projektiin automaattisesti. Versioristiriitojen ratkaisemisessa käytetään "lähimmän" riippuvuuden periaatetta, eli valitaan riippuvuus, johon polku riippuvaisten projektien luettelon läpi on lyhin.
  • Poista riippuvuudet. Projektin kuvaustiedosto tarjoaa mahdollisuuden sulkea pois riippuvuus, jos havaitaan syklisyys tai tietyn kirjaston tarpeeton.
  • Etsi riippuvuuksia. Riippuvuudet (avoimen lähdekoodin kirjastot ja moduulit) etsitään niiden koordinaattien (groupId, artifactId ja version) perusteella. Nämä koordinaatit voidaan määrittää erityisillä hakukoneilla, kuten Maven-hakukoneella [25] . Esimerkiksi hakuattribuutille "pop3" hakukone palauttaa tuloksen, jossa on groupId="com.sun.mail" ja artifactId="pop3".
  • Tietovaraston ylläpitäjät. Tietovarastot toteutetaan Maven Repository Managerilla, kuten Apache Archiva, Nexus (aiemmin Proximity), Artifactory, Codehaus Maven Proxy tai Dead Simple Maven Proxy [26] .

Riippuvuuslaajuus mahdollistaa riippuvuuksien sisällyttämisen vain tietyssä projektin rakentamisvaiheessa. On 6 mahdollista aluetta [27] :

  1. koota. Oletusalue. Riippuvuus on käytettävissä kaikissa projektin luokan hakupoluissa. Jaettu riippuvaisille projekteille.
  2. tarjotaan. Laajuus on samanlainen kuin kääntäminen, paitsi että JDK tai säilö itse toimittaa riippuvuuden suorituksen aikana.
  3. suoritusaika. Riippuvuutta ei tarvita kääntämiseen, mutta sitä tarvitaan suorittamiseen.
  4. testata. Riippuvuutta ei tarvita sovelluksen normaaliin toimintaan, vaan sitä tarvitaan vain testien kääntämiseen ja suorittamiseen.
  5. järjestelmä. Laajuus on samanlainen kuin tarjottu, paitsi että riippuvuuden sisältävä JAR on erikseen määritelty. Artefaktia ei etsitä arkistosta.
  6. tuontia (Maven 2.0.9:stä lähtien) käytetään vain pom-riippuvuuden kanssa <dependencyManagement>. Nykyisen POM:n riippuvuudet korvataan määritetyn POM:n riippuvuuksilla.

Projektin saaminen näyttämään Mavenilta

Mavenilla ylläpidetyn projektin on täytettävä tietyt ehdot, jotta se voidaan lukea, jäsentää ja rakentaa. Tämä asettaa rajoituksia hakemistorakenteelle ja vaatii lisävaiheita, jos projektilla on alun perin erilainen rakenne. [28]

Jotta Maven tunnistaa projektin käsiteltäväksi, sen on sisällettävä vakiintunut hakemistorakenne. Kaikkien lähdekooditiedostojen on sijaittava suhteellisessa polussa " \src\main\java " [17] .

Verkkoprojektin määritystiedoston web.xml on sijaittava \src\main\webapp\WEB-INF-hakemistossa [17 ] .

Maven-projektin pom.xml- määritystiedoston on sijaittava projektin juurihakemistossa. Tarkoituksensa mukaan se voi sisältää etävaraston, laajennuksia arkistojen luomiseen, kääntäjälaajennuksen ja niin edelleen. Verkkoprojektiin on myös lisättävä lisäriippuvuuksia, kuten javaee.jar.

Joten ulostuloverkkoprojektin määritystiedosto, joka on yhdenmukainen Mavenin kanssa, näyttää tältä:

<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> <pakkaus> sota </packaging> <versio> 1.0-SNAPSHOT </version> <name> servletdemo </name> <url> http://maven.apache.org </url> <arkistot> <varasto> <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/luokat </targetPath> <includes> <include> **/*.properties </include> <include> **/*.xml </ sisällytä> <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> </ projekti>

Kun kaikki yllä olevat vaatimukset on täytetty, Maven-projekti on valmis suorittamaan elinkaaren vaiheita, kuten kokoamisen, arkiston rakentamisen ja dokumentaation luomisen [29] .

Esimerkki viestien tulostelokista komentoa suoritettaessa mvn war:war:

E:\workspace\servletdemo>mvnwar:war [INFO] Etsitään projekteja... ....... [INFO] Käsitellään sotaprojektia [INFO] Kopioidaan verkkosovellusresursseja[E:\workspace\servletdemo] [INFO] Webapp koottu [47 millisekunnissa] [INFO] Rakennussota: E:\workspace\servletdemo\target\servletdemo-1.0-SNAPSHOT.war [TIEDOT]----------------------------------------------- ----- [TIEDOT] RAKENNUS ONNISTUI [TIEDOT]----------------------------------------------- -----

Vuorovaikutus kehitysympäristöjen kanssa

Joillekin IDE: ille Maven tarjoaa laajennuksia, joiden avulla voit hallita elinkaarta suorittamalla komentoja IDE-liittymän avulla. Tällaisten kehitysympäristöjen luettelo sisältää Eclipse ( M2eclipse- laajennuksen kautta ), IntelliJ IDEA , NetBeans , JBuilder , JDeveloper (versio 11.1.2), MyEclipse, Emacs [30]

Nämä laajennukset tarjoavat myös mahdollisuuden muokata POM:ia kätevästi tai käyttää POM:ia kuvaamaan täysin projektin riippuvuuksia käyttämäsi IDE:n tarpeisiin.

Muistiinpanot

  1. CrunchBase  (englanniksi) - 2007.
  2. https://maven.apache.org/docs/3.8.6/release-notes.html
  3. https://www.zhihu.com/question/20297619
  4. Avoimen lähdekoodin maven2-projekti Open Hubissa: Kielet-sivu - 2006.
  5. https://projects.apache.org/json/projects/maven.json
  6. Arkistoitu kopio (linkki ei saatavilla) . Haettu 26. helmikuuta 2012. Arkistoitu alkuperäisestä 19. helmikuuta 2012.   POM
  7. Maven - Mikä on Maven? . Haettu 25. helmikuuta 2012. Arkistoitu alkuperäisestä 21. helmikuuta 2012.
  8. Apache Maven -yhteisö. Apache Maven Compiler -laajennus . Apache Maven -projekti . Käyttöpäivä: 18. joulukuuta 2015. Arkistoitu alkuperäisestä 13. joulukuuta 2015.
  9. Maven-versioiden historiallinen arkisto Arkistoitu 11. helmikuuta 2012 Wayback Machinessa .
  10. Maven 1.x:n virallinen sivu Arkistoitu 15. helmikuuta 2012.
  11. ↑ 1 2 Apache Maven Foundation. Mavenin julkaisuhistoria . Apache Maven Docs . Haettu 20. joulukuuta 2015. Arkistoitu alkuperäisestä 19. joulukuuta 2015.
  12. ↑ 1 2 Apache Foundations. POM-tiedoston vähimmäissisältö on . Apache Maven -projekti . Haettu 6. lokakuuta 2007. Arkistoitu alkuperäisestä 19. marraskuuta 2017.
  13. Super POM arkistoitu 19. marraskuuta 2017 Wayback Machinessa .
  14. Esimerkki: Maven Arkistoitu 15. syyskuuta 2020 Wayback Machinessa .
  15. Mikä on sopimus konfiguroinnin yli? . Haettu 28. lokakuuta 2016. Arkistoitu alkuperäisestä 14. syyskuuta 2016.
  16. Apache Maven Foundation. Mavenin dokumentaatio. Arkkityypit. . Käyttöpäivä: 18. joulukuuta 2015. Arkistoitu alkuperäisestä 22. joulukuuta 2015.
  17. ↑ 1 2 3 Apache Mavenin virallinen sivu: Hakemistorakenne Arkistoitu 21. helmikuuta 2012 Wayback Machinessa .
  18. Maven Build Lifecycle Reference Arkistoitu 17. marraskuuta 2017 Wayback Machinessa .
  19. .NET Maven Plugin arkistoitu 27. lokakuuta 2016 Wayback Machinessa .
  20. Native Maven Plugin Arkistoitu 29. lokakuuta 2016 Wayback Machinessa .
  21. NAR-laajennus arkistoitu 20. joulukuuta 2017 Wayback Machinessa .
  22. Maven Compiler Plugin arkistoitu 15. joulukuuta 2017 Wayback Machinessa .
  23. Maven - Available plugins Arkistoitu 24. heinäkuuta 2017 Wayback Machinessa .
  24. Maven Central Repository arkistoitu 26. huhtikuuta 2020 Wayback Machinessa .
  25. Maven-hakukone Arkistoitu 26. huhtikuuta 2020 Wayback Machinessa .
  26. Vertailutaulukko Arkistoitu 23. marraskuuta 2012.
  27. Apache Maven Foundation. maven dokumentaatio. Johdatus riippuvuusmekanismiin . Käyttöpäivä: 18. joulukuuta 2015. Arkistoitu alkuperäisestä 20. joulukuuta 2015.
  28. Web-projektin muuntaminen Maven-projektiksi Arkistoitu 21. helmikuuta 2012 Wayback Machinessa .
  29. Apache Foundation. Projektin rakentaminen Mavenin kanssa . Apache Maven -dokumentaatio . Käyttöpäivä: 21. joulukuuta 2015. Arkistoitu alkuperäisestä 3. tammikuuta 2016.
  30. EmacsWiki: Malabar Mode Arkistoitu 3. marraskuuta 2013 Wayback Machinessa .

Linkit

  • Vygovsky Leonid. Artifactory maven -arkiston asennus (5. tammikuuta 2010). — Tämä artikkeli sisältää yksityiskohtaiset ohjeet maven-arkiston asentamiseen Glassfish-sovelluspalvelimeen tai Apache Tomcat -servlet-säilöön. Käytetty 5. tammikuuta 2010. Arkistoitu 29. helmikuuta 2012.