Programmering

Hvad er Maven? Bygnings- og afhængighedsstyring til Java

Apache Maven er en hjørnesten i Java-udvikling og det mest anvendte build management-værktøj til Java. Mavens strømlinede, XML-baserede konfigurationsmodel giver udviklere mulighed for hurtigt at beskrive eller forstå konturerne af ethvert Java-baseret projekt, hvilket gør det nemt at starte og dele nye projekter. Maven understøtter også testdrevet udvikling, langsigtet projektvedligeholdelse og dens deklarative konfiguration og et bredt udvalg af plugins gør det til en populær mulighed for CI / CD. Denne artikel er en hurtig introduktion til Maven, inklusive Maven POM og katalogstruktur, og kommandoer til opbygning af dit første Maven-projekt.

Bemærk, at den seneste Maven-udgivelse i skrivende stund er Maven 3.6.3.

Maven vs Ant og Gradle

Maven er ikke det eneste byggeværktøj i Java-økosystemet, selvom det er det mest populære. Ant, en tidligere generation af XML-baseret konfigurationsværktøj, mangler Mavens standardiserede, konventionbaserede praksis og afhængighedsstyring, men tilbyder fleksibilitet, som du ikke finder med Maven. Gradle er et nyere værktøj, der kører oven på Maven-økosystemet (ved hjælp af Mavens arkiver), men understøtter brug af en Groovy- eller Kotlin-baseret DSL til konfiguration. Alle tre er i sig selv gode byggeværktøjer, og hver kan integreres i en CI / CD-proces. Det der betyder noget er at vælge den rigtige til dine behov og vide, hvordan du bruger den korrekt.

Hvordan Maven fungerer

Som mange gode værktøjer tager Maven det, der engang var overkompliceret (konfigurationshelvede) og forenkler det til fordøjelige dele. Maven består af tre komponenter:

  • POM: Filen, der beskriver et Maven-projekt og dets afhængigheder.
  • Kataloget: Det standardiserede format til beskrivelse af et Maven-projekt i POM.
  • Opbevaringssteder: Hvor tredjepartssoftware gemmes og opdages.

Maven POM: Hvert Java-projekt, der bruger Maven, har en POM-fil (projektobjektmodel) i sin rodmappe. Det pom.xml beskriver projektets afhængigheder og fortæller dig, hvordan du bygger det. (Afhængigheder er software fra tredjepart, der kræves af projektet. Nogle almindelige eksempler er JUnit og JDBC. Se Maven Central Repository for en liste over alle tilgængelige værktøjer og populære afhængigheder.)

Maven-biblioteket: Maven-biblioteket implementerer det, der er kendt som konvention over konfiguration, en elegant løsning på konfigurationshelvede. I stedet for at kræve, at udviklere definerer layoutet og håndkonfigurerer komponenter til hvert nye projekt (som det var tilfældet med makefile og Ant), Maven opretter en fælles projektstruktur og tilbyder et standardfilformat til beskrivelse af, hvordan det fungerer. Du tilslutter bare dine krav, og Maven kalder afhængigheder op og konfigurerer projektet for dig.

Centraliserede arkiver: Endelig bruger Maven centraliserede arkiver til både at opdage og udgive projektpakker som afhængigheder. Når du refererer til en afhængighed i dit projekt, opdager Maven det i det centraliserede lager, downloader det til et lokalt lager og installerer det i dit projekt. Det meste af tiden er alt dette usynligt for dig som udvikler.

Adgang til Maven-afhængigheder

Som standard løser Maven afhængigheder fra Maven Central Repository. Et almindeligt alternativ er JCenter, som har et bredere sæt tilgængelige pakker. Organisationer udgiver og hoster også interne arkiver, som kan være offentlige eller private. For at få adgang til et arkiv skal du angive dens URL i Maven POM, eller du kan bede Maven om at kigge i andre arkiver.

Installation af Maven

Maven er et Java-projekt, så før du installerer det, skal du have JDK installeret i dit udviklingsmiljø. (Se "Hvad er JDK? Introduktion til Java Development Kit" for mere om download og installation af JDK.)

Når du har konfigureret dit Java-udviklingsmiljø, kan du installere Maven i få trin:

  1. Download den nyeste Maven-udgivelse (Maven 3.6.3, når dette skrives).
  2. Uddrag apache.maven .zip-fil til et praktisk sted.
  3. Placer den fil på din sti. For eksempel på et Unix- eller Linux-system: eksport PATH = $ PATH: / hjem / maven /.

Du skal nu have adgang til mvn kommando. Type mvn -v for at sikre, at du har installeret Maven med succes.

Maven POM

Roden til hvert Maven-projekt er pom.xml fil. På trods af sit ry for at være kedelig fungerer XML faktisk ret godt til denne brugssag. Mavens POM er let at læse og afslører meget af, hvad der sker i et projekt. (Hvis du har arbejdet med JavaScript, pom.xml svarer i form til node-NPM'er pakke.json fil.)

Liste 1 viser en meget enkel Maven pom.xml.

Notering 1. Simple Maven POM

   4.0.0 com.javaworld what-is-maven 1.0-SNAPSHOT Simple Maven Project jar junit junit 4.12 test 

Forståelse af Maven POM

Når du først har fået fat i det, er POM ikke mystisk. For at starte kan du skimme over XML-præamblen, som bare refererer til det officielle POM-skema. Bemærk XML startende med modelVersiondog. Det fortæller Maven hvilken version af POM der skal bruges, i dette tilfælde Maven POM 4.0.0.

Derefter har du det groupId, artefaktIdog version. Tilsammen identificerer disse tre attributter entydigt alle Maven-styrede ressourcer i arkivet. Disse attributter øverst i filen beskriver dit Maven-projekt.

Se nu på afhængigheder sektion af POM, hvor vi beskriver projektets afhængighed. I dette tilfælde har vi kun trukket en afhængighed hidtil, JUnit. Bemærk, at JUnit også er beskrevet i form af dets groupId, artefaktIdog version.

Uanset om du beskriver dit eget projekt eller en projektafhængighed, fortæller disse værdier Maven konsekvent, hvor man finder et projekt i Maven-arkivet, og hvilken version der er tilgængelig til brug.

Hosting dit projekt i et Maven-arkiv

Husk, at POM definerer alt, hvad dit projekt skal køre, men det beskriver også dit projekt som en potentiel afhængighed. Hvis du bygger et projekt, der vil være en afhængighed - f.eks. At oprette et bibliotek til andre projekter, der skal bruges - skal du gøre det tilgængeligt på en af ​​fire måder:

  1. Gør det tilgængeligt lokalt.
  2. Publicer til et privat administreret fjernlager.
  3. Publicer til et skybaseret privat arkiv.
  4. Publicer til et offentligt arkiv som Maven Central.

I det første tilfælde bruger du slet ikke et eksternt lager. I stedet vil andre udviklere downloade og installere dit projekt lokalt til deres Maven repo ved hjælp af mvn installere kommando.

I det andet tilfælde bruger du et hostet Maven-lager, der bruger privat styret server til at offentliggøre og downloade afhængigheder. Til dette har du brug for en lageradministrator, som Apache Archiva.

Et nyere alternativ er at bruge en privat ekstern repo, men stole på en skybaseret tjeneste for at administrere den, for eksempel Cloudsmith. Dette giver fordelen ved fjernhostede afhængigheder uden arbejdet med at stå op til en reposerver. Denne service er selvfølgelig mod betaling.

Endelig ender en lille procentdel af projekterne i Central Maven Repository eller JCenter, som er beregnet til almindeligt anvendte, offentlige pakker. Hvis du opretter en open source-afhængighed, der skal bruges af andre, skal du bruge et af disse centraliserede arkiver for at gøre dit arbejde tilgængeligt for verden.

  • Lær mere om at være vært for dit projekt i et Maven-arkiv, og få en liste over tilgængelige arkiver.
  • Se den officielle Maven-dokumentation om Maven Release Plugin, der bruges til at forberede og administrere software, der er offentliggjort i et Maven-arkiv.

Byg Maven-pakken

Hvis du opretter pom.xml fra liste 1 og læg den i en mappe, vil du være i stand til at køre Maven-kommandoer mod den. Maven har en lang række kommandoer, og flere er tilgængelige via plugin, men du behøver kun at kende en håndfuld for at starte.

Prøv at udføre for din første kommando mvn-pakke. Selvom du ikke har nogen kildekode endnu, udfører denne kommando Maven at downloade JUnit-afhængighed. Du kan kontrollere Mavens loggeoutput for at se, at afhængigheden er indlæst ..

Afhængighedsomfang

Du har muligvis bemærket, at JUnit-afhængigheden i eksemplet POM er markeret som omfangstest. Anvendelsesområde er et vigtigt koncept i afhængighedsstyring, der i det væsentlige giver dig mulighed for at definere og begrænse, hvordan hver afhængighed kaldes og bruges i dit projekt. Det prøve omfang sikrer, at afhængigheden er tilgængelig, når du kører tests, men ikke når appen er pakket til implementering.

Et andet fælles anvendelsesområde er stillet til rådighed, som fortæller rammen om, at afhængigheden leveres af runtime-miljøet. Dette ses ofte med Servlet JARS, når det implementeres i en servletcontainer, da containeren vil give disse JARS. Se Apache Maven-dokumentationen for en komplet liste over Maven-afhængighedsomfang.

Mavens katalogstruktur

Når kommandoen er udført, skal du bemærke, at Maven har oprettet en /mål vejviser. Det er standardplaceringen for dit projekts output. Afhængigheder, du har downloadet, findes i /mål bibliotek sammen med dine kompilerede programgenstande.

Dernæst vil du tilføje en Java-fil, som du placerer i Maven src / vejviser. Lave en /src/main/java/com/javaworld/Hello.java fil med indholdet af liste 2.

Notering 2. Hello.java

 com.javaworld public class Hello {public static void main (String [] args) {System.out.println ("Hello, JavaWorld"); }} 

Det / src sti er standard stedet for dit projekts kildefiler. De fleste projekter lægger deres hovedfiler i / src / main /, med Java-filer, der går ind i klassestien under / java. Derudover, hvis du vil medtage aktiver, der er ikke kode, som konfigurationsfiler eller billeder, kan du bruge / src / main / ressourcer. Aktiver i denne sti føjes til hovedklassestien. Testfiler går ind i / src / test / java.

Her er nogle vigtige dele af en Maven-projektstruktur (som defineret af Maven Standard Directory Structure):

Vigtige dele af Maven Standard Directory Structure

pom.xmlProjektbeskrivelsesfilen
/ src / main / javaPlacering af kildefiler
/ src / main / ressourcerPlacering af aktiver uden for kilden
/ src / test / javaPlacering af testkildefiler
/målPlacering af buildoutput

Administration af dit Maven-projekt

Det mvn-pakke kommando instruerer Maven om at samle projektet. Udsted denne kommando, når du er klar til at samle alle dine projektfiler ét sted. Husk, at vi i POM-filen til dette projekt indstiller emballagetypen til at være krukke, så denne kommando fortæller Maven at pakke applikationsfilerne i en JAR.

Maven tilbyder en række ekstra muligheder for at kontrollere, hvordan JAR styres, hvad enten det er en fedt eller tynd JAR, og angive en eksekverbar hovedklasse. Se Maven-dokumenterne for at lære mere om filhåndtering i Maven.

Når du har samlet et projekt, vil du sandsynligvis udstede et mvn installere. Denne kommando skubber projektet ind i det lokale Maven-arkiv. Når det er i det lokale arkiv, er det tilgængeligt for andre Maven-projekter i dit lokale system. Dette er nyttigt til udviklingsscenarier, hvor du og / eller dit team opretter afhængigheds-JAR'er, der endnu ikke er offentliggjort i et centralt lager.

Yderligere Maven-kommandoer

Gå ind mvn test når du er klar til at køre enhedstest, du har defineret i / src / java / test vejviser.

Gå ind mvn kompilere når du er klar til at kompilere projektets klassefiler. Hvis du kører en hot-deploy-opsætning, udløser denne kommando hot-deploying class loader. (Hot-deploy-værktøjet - som Spring Boot's mvn spring-boot: løb kommando - overvåger klassefiler for ændringer, og kompilering får dine kildefiler til at blive kompileret, og det kørende program afspejler disse ændringer.)

Start af et nyt projekt: Arketyper i Maven og Spring

EN Maven arketype er en skabelon til opstart af nye projekter baseret på en række foruddefinerede indstillinger. Hver arketype tilbyder færdigpakkede afhængigheder, f.eks. Til et Java EE- eller Java-webapplikationsprojekt. Du kan også oprette en ny arketype fra et eksisterende projekt og derefter bruge den til hurtigt at oprette nye projekter baseret på disse foruddefinerede layouts. Se Maven-dokumenterne for at lære mere om Apache Maven-arketyper.

Spring-rammen, der fungerer godt sammen med Maven, tilbyder yderligere, sofistikerede muligheder for at stubbe nye projekter ud. For eksempel er Spring Initializr et værktøj, der lader dig meget hurtigt definere de elementer, du ønsker i en ny app. Initializr er ikke en Maven-arketype i sig selv, men det tjener det samme formål at generere et projektlayout baseret på specifikationer, der er optimale. Fra Initializr kan du skrive mvn arketype: generer og scann gennem mulighederne for at finde en arketype, der passer til det, du bygger.

Tilføjelse af afhængigheder

$config[zx-auto] not found$config[zx-overlay] not found