Automatisering og udviklingsværktøjer er absolut blandt de vigtigste aspekter af et projekt, og i denne blog vil vi diskutere Maven. Maven er et kraftfuldt automatiseringsværktøj til Java-projekter. Det forenkler byggeprocessen og skaber en ensartet struktur for projekter. Så det gør det nemmere at styre og forstå projekter. Denne blog dækker næsten alt i Mavens verden og dækker en bred vifte af kommandoer og muligheder, der vil strømline din udviklingsarbejdsgang. Vi vil udforske forskellige aspekter såsom Server & Container Management, Source Control Management (SCM) og GPG til signering af artefakter. Derudover vil vi se nærmere på specialiserede kommandoer til Plugin Management, Assembly & Distribution og generering af projektwebsteder og rapporter. Så ved slutningen af denne guide har du en grundig forståelse af Maven kommandoer og muligheder.
- Oversigt over Maven; Projektets livscyklus
- Afhængighedsstyring
- Udførelse
- Server- og containerstyring
- SCM (Source Control Management)
- GPG (GNU Privacy Guard)
- Udgivelsesstyring
- Arketype
- Plugin Management
- Montering & Distribution
- Kommandoer til generering af websteder
- WAR & JAR kommandoer
- Indberetning
- Byg tilpasning
- Konklusion
- FAQ
Oversigt over Maven; Projektets livscyklus
På jiddisch betyder ordet Maven "akkumulator af viden". Denne betydning forklarer stort set kraften i Maven som et automatiseringsværktøj til Java-projekter. Maven gør byggeprocessen og projektstyringen meget enkel. Og det gør den ved at automatisere forskellige opgaver og levere et ensartet byggesystem.
Lad os nu nedbryde begrebet en for at få en klar idé om, hvordan Maven fungerer Project Object Model (POM). POM er en XML-fil, der indeholder information om projektet og konfigurationsdetaljer. Maven bruger POM som grundlaget for sit arbejde. Så Maven tager projektets afhængigheder, build-mappe, kildemappe, testkildemappe og mål fra denne kilde for at fungere.
Efter at have defineret projektet og dets afhængigheder fra pom.xml, når du kører en Maven-kommando, læser den pom-filen for at udføre den specifikke byggefase for den kommando. Der er en lang projektlivscyklus fra det øjeblik, du opretter projektet, til du rent faktisk implementerer det. Denne livscyklus definerer rækkefølgen af faser dit projekt skal igennem. Hver fase repræsenterer et trin i livscyklussen og udfører specifikke opgaver, såsom kompilering af kildekode, kørsel af tests og pakning af koden i et distribuerbart format. Alle disse gør Mavens projektlivscyklus til et vigtigt koncept at forstå. Så lad os se nærmere på Mavens livscyklusfaser:
- Valider: Denne fase validerer, at projektet er korrekt, og at al nødvendig information er tilgængelig.
- Udarbejde: I denne fase kompileres projektets kildekode.
- Prøve: Denne fase tester den kompilerede kildekode ved hjælp af en passende enhedstestramme.
- Pakke: Denne fase pakker den kompilerede kode i dets distribuerbare format (f.eks. JAR, WAR).
- Installere: I installationsfasen installeres pakken i det lokale lager og bliver tilgængelig for andre projekter på samme maskine.
- Indsætte: Denne fase kopierer den endelige pakke til fjernlageret til deling med andre udviklere og projekter.
Hver af disse faser har en tilsvarende mvn-kommando, som vi vil dække i de kommende sektioner af vores maven cheatsheet. Disse vil være de vigtigste kommandoer, der skal bruges til at styre dit projekts byggeproces.
Afhængighedsstyring
En af Mavens kernefunktioner er afhængighedsstyring. Denne funktion er så vigtig i Mavens ydeevne, fordi den gør det nemmere at håndtere projektafhængigheder.
Hvordan Maven administrerer afhængigheder
Maven bruger et centraliseret depot, kendt som Maven Central Repository, hvor en bred vifte af biblioteker og plugins er hostet. Når et projekt kræver en afhængighed, downloader Maven automatisk de nødvendige biblioteker fra det centrale lager og gemmer dem i det lokale lager. Dette lokale lager er en cache på din lokale maskine, der reducerer downloadtider for fremtidige builds.
Afhængigheder i Maven er specificeret i pom.xml fil under <afhængigheder> afsnit. Hver afhængighed er defineret af et sæt koordinater: gruppe-id, artefakt-id, og version.
Afhængighedsomfang
Når du arbejder med Maven, kan du angive omfanget af afhængigheder. Denne faktor definerer klassestiens synlighed og livscyklusfasen for afhængigheden. Så du kan vide, hvilken fase der kræver denne afhængighed. De almindelige scopes er:
- Udarbejde: Dette er standardomfanget og bruges, når der ikke er angivet noget omfang. Afhængigheder med dette omfang er tilgængelige i alle byggefaser og er inkluderet i den endelige pakke.
- Forudsat: Vi forventer, at afhængighederne med dette omfang er klar af runtime-miljøet. De bruges under kompilering, men er ikke inkluderet i den endelige pakke.
- Kørselstid: Disse afhængigheder er ikke nødvendige for kompilering, men er nødvendige under udførelsen. De er inkluderet i runtime classpath.
- Prøve: Disse afhængigheder er kun nødvendige for at kompilere og køre test. De er ikke inkluderet i runtime eller den endelige pakke.
- System: Systemomfanget ligner det angivne omfang, men du skal angive den JAR, som Maven vil bruge. JAR'en skal være til stede i systemstien.
Transitive afhængigheder
En af Mavens kraftfulde funktioner er, at den kan håndtere transitive afhængigheder. Når et projekt erklærer en afhængighed, inkluderer Maven automatisk ikke kun denne afhængighed, men også dens afhængigheder, afhængighederne af deres afhængigheder og så videre. Denne kæde af afhængigheder er kendt som transitive afhængigheder. For at gøre tingene klart, forestil dig, at dit projekt afhænger af spring-boot-starter-web, nu vil Maven også inkludere alle biblioteker, som spring-boot-starter-web afhænger af, såsom Spring Core, Spring MVC og Jackson.
Nu hvor du kender til teorien om, hvordan Maven håndterer afhængigheder, lad os se, hvordan man arbejder med det i praksis:
mvn dependency:resolve
Denne kommando kan løse og vise alle de afhængigheder, der kræves til dit projekt. Du kan bruge den til at se, hvilke biblioteker dit projekt afhænger af og sikre dig, at alt er i orden.
mvn dependency:tree
Med denne kommando kan du have en træstruktur af dine projektafhængigheder. Det viser, hvordan hver afhængighed er relateret og hjælper med at identificere potentielle konflikter.
mvn dependency:analyze
Denne kommando analyserer dit projekts afhængigheder for at finde ubrugte artefakter. Det hjælper dig med at rydde op i dit projekt og undgå unødvendig oppustethed.
Mavens afhængighedsstyringsfunktioner gør din udviklingsproces nem. De hjælper dig også med at undgå almindelige faldgruber og opretholde en ren, organiseret projektstruktur.
Udførelse
Udførelse i Maven involverer at køre specifikke opgaver eller mål inden for projektet. Disse opgaver kan variere fra at køre Java-programmer til at udføre eksterne scripts eller kommandoer. Maven leverer kraftfulde plugins for at gøre disse henrettelser nemme. Dette er en anden funktion ved Maven, der gør det til et godt værktøj til at automatisere forskellige dele af dit projektarbejdsgang. Så lad os gennemgå de vigtigste maven-udførelseskommandoer:
mvn exec:java
Denne kommando bruges til at udføre en Java-klasse i dit projekt. Det er nyttigt til at køre hovedklasser eller teste selvstændige Java-programmer uden at pakke dem først.
mvn exec:exec
Denne kommando giver dig mulighed for at udføre ethvert eksternt program eller script fra Maven-miljøet. Du kan bruge det til at køre shell-scripts, eksterne værktøjer eller andre programmer, der er en del af din byggeproces.
Udførelseskommandoerne i Maven hjælper dig med at automatisere gentagne opgaver. Du kan også bruge dem til at integrere eksterne værktøjer og scripts i din Maven build-livscyklus. Så samlet set kan de hjælpe dig med at håndtere dine opgaver meget mere effektivt.
Server- og containerstyring
Håndtering af servere og containere er et vigtigt trin i udvikling og implementering af webapplikationer. Maven letter denne proces med kraftfulde plugins, der gør dig i stand til at køre, implementere og administrere webapplikationer på forskellige servere og containere direkte fra din byggeproces. Her er nogle vigtige Maven-kommandoer til styring af servere og containere:
mvn tomcat7:run
Denne kommando kører din webapplikation vha Apache Tomcat. Det er nyttigt til lokal udvikling og test og giver dig mulighed for hurtigt at implementere og teste din webapplikation uden at opsætte et komplet servermiljø.
mvn jetty:run
Denne kommando kører din webapplikation ved hjælp af en populær webserver kaldet Anløbsbro. Ligesom Tomcat er Jetty fantastisk til udvikling og test på grund af dens lette og hurtige implementeringsmuligheder.
Sådan fungerer server- og containerstyring
Maven bruger plugins som tomcat7-maven-plugin og jetty-maven-plugin at administrere serverdrift. Disse plugins giver dig mulighed for at starte, stoppe og konfigurere servere som en del af din build-livscyklus. Så det bliver meget nemmere at udvikle og teste webapplikationer i et konsistent miljø. Brug af Maven-profiler til at definere serverkonfigurationer for forskellige miljøer hjælper dig med at administrere forskellige indstillinger for udvikling, test og produktion. Denne funktion i Maven giver dig også mulighed for at konfigurere logning og overvågning i dine server-plugins. Så du kan holde styr på serveraktiviteter og fejlfinde problemer hurtigt.
SCM (Source Control Management)
Et vigtigt aspekt af ethvert udviklingsprojekt er Source Control Management (SCM). Udviklingsteams har brug for SCM til at administrere ændringer af kildekoden over tid. Maven har et sæt kommandoer til at interagere med SCM-systemer såsom Git, Subversion og andre. Disse kommandoer kan automatisere forskellige opgaver, såsom at tjekke kode ind, tjekke kode ud og opdatere projektversioner. Her er nogle af de vigtigste Maven SCM-kommandoer og deres muligheder:
mvn scm:checkin
Du kan bruge denne mvn-kommando til at tjekke projektets ændringer ind i SCM. Denne kommando hjælper med at automatisere processen med at foretage ændringer til kildekontrollageret. Så de seneste opdateringer er helt sikkert gemt og delt med teamet.
mvn scm:checkout
Denne maven-kommando bruges til at tjekke projektets kode fra SCM-lageret, og det er nyttigt til at få en lokal kopi af projektet. Så du er altid sikker på, at du arbejder med den nyeste version af kildekoden.
mvn scm:update
Denne mvn-kommando opdaterer den lokale arbejdskopi af projektet med de seneste ændringer fra SCM-lageret. Denne kommandos opgave er at sikre, at din lokale kodebase er synkroniseret med depotet og inkluderer alle nye ændringer foretaget af andre teammedlemmer.
mvn scm:status
Denne mvn-kommando viser status for den lokale arbejdskopi i forhold til SCM-lageret. Med andre ord fortæller den dig om alle de ændringer, der er foretaget lokalt, men som endnu ikke er forpligtet til depotet.
mvn scm:tag
Denne kommando bruges til at oprette et tag i SCM-lageret. Tags markerer specifikke punkter i projektets historie, såsom udgivelser eller væsentlige milepæle.
Maven SCM-kommandoer kan i høj grad strømline processen med at administrere dit projekts kildekode. Forståelse og brug af disse kommandoer vil forbedre din effektivitet og samarbejde i dit udviklingsteam.
GPG (GNU Privacy Guard)
GNU Privacy Guard (GPG) er en kryptografisk software, der giver brugerne mulighed for at kryptere og signere data og kommunikation. I forbindelse med Maven bruges GPG til at signere artefakter for at sikre deres ægthed og integritet. Dette er vigtigt, når du implementerer artefakter til offentlige arkiver, fordi det giver brugerne mulighed for at bekræfte, at artefakterne ikke er blevet manipuleret med. Maven giver flere kommandoer til at arbejde med GPG og letter processen med at signere og implementere dit projekts artefakter. Lad os se nogle af disse kommandoer som eksempler:
mvn gpg:sign
Du kan bruge denne maven-kommando til at signere projektets artefakter med GPG. Signering af artefakter sikrer, at de kan verificeres af andre og giver et lag af sikkerhed og tillid. Denne kommando bruges ofte under byggeprocessen til at signere JAR'er, WAR'er og andre typer artefakter før implementering.
mvn gpg:sign-and-deploy-file
Denne mvn-kommando kombinerer signering og implementering af en fil i et enkelt trin. Du kan bruge den, når du vil signere en artefakt og straks implementere den til et lager. Dette strømliner din proces og sikrer, at du vil signere en artefakt og straks implementere den til et lager.
Inkorporering af GPG-signering i din Maven-byggeproces kan forbedre sikkerheden og pålideligheden af din software. Så det bliver nemmere for brugerne at stole på og verificere dine artefakter.
Udgivelsesstyring
Udgivelsesstyring er så vigtig i softwareudvikling. Med effektiv udgivelsesstyring kan du sikre dig, at softwareversioner er korrekt administreret, pakket og implementeret. Maven giver et sæt kommandoer til at automatisere og strømline udgivelsesprocessen. Lad os se på nogle eksempler på maven-indstillinger og kommandoer til udgivelsesstyring:
mvn release:prepare
Denne mvn-kommando bruges til at forberede et projekt til en udgivelse. Den udfører opgaver som at kontrollere, at der ikke er nogen uforpligtede ændringer, opdatere versionsnumrene i pom.xml filer, tagging af udgivelsen i kildekontrolstyringssystemet (SCM) og opdatering af pom.xml filer til næste udviklingsversion. Det sikrer, at projektet er i en stabil tilstand og klar til udgivelse.
mvn release:perform
Denne kommando udfører selve frigivelsesprocessen. Det tjekker projektet ud fra SCM ved tagget oprettet af frigivelse: forberede kommando, bygger projektet og implementerer artefakterne til det angivne lager. Denne kommando sikrer, at artefakterne er bygget ud fra den nøjagtige tilstand af koden på tidspunktet for udgivelsesforberedelsen.
mvn release:clean
Denne mvn-kommando fjerner alle udgivelsesbeskrivelsens backupfiler, der oprettes under frigivelse: forberede behandle. Det rydder op i miljøet og sørger for, at der ikke er nogen filer tilbage fra tidligere udgivelsesforsøg. Denne kommando giver dig et rent arbejdsområde og forhindrer potentielle problemer i de næste udgivelser.
Brug af udgivelsesstyringskommandoer strømliner udgivelsesprocesser, forbedrer softwarekvaliteten og sikrer, at udgivelser administreres effektivt.
Arketype
Hvis du er en udvikler, der ønsker at skabe projektstrukturer baseret på foruddefinerede skabeloner, bør du overveje at bruge Maven Archetype plugin. Her vil vi diskutere de primære Maven-kommandoer forbundet med arketyper.
mvn archetype:generate
Du kan bruge denne mvn-kommando til at oprette et nyt projekt fra en eksisterende skabelon eller "arketype." Denne kommando guider brugeren gennem at vælge en arketype og konfigurere det nye projekt. Så det hjælper dig med at opsætte et velstruktureret projekt.
mvn archetype:catalog
Denne kommando viser tilgængelige arketyper, der kan bruges til at generere nye projekter. Det er nyttigt til at udforske de forskellige skabeloner leveret af Maven-fællesskabet og bestemme, hvilken arketype der passer bedst til dit projekts behov.
Ved at bruge disse to maven-kommandoer kan du hurtigt starte et nyt projekt. Uanset om du starter en simpel Java-applikation eller et komplekst virksomhedsprojekt, giver Maven-arketyper et værdifuldt udgangspunkt.
Plugin Management
Maven-plugins giver udviklere mulighed for at udvide funktionaliteten af Maven og automatisere forskellige opgaver inden for build-livscyklussen. Effektiv administration af plugins sikrer, at dit projekt forbliver vedligeholdeligt, og builds er reproducerbare. Dette afsnit vil dække vigtige Maven-plugin-styringskommandoer.
mvn plugin:download
Denne kommando bruges til at downloade et specifikt Maven-plugin fra lageret. Du kan bruge det, når du vil sikre dig, at et specifikt plugin er tilgængeligt i dit lokale lager, før du kører andre Maven-kommandoer, der afhænger af det.
mvn plugin:help
Denne maven-kommando viser detaljeret information og dokumentation om et specifikt Maven-plugin. Du kan bruge det, når du har brug for at forstå de forskellige mål, parametre og konfigurationer, der er tilgængelige for et plugin.
Disse Maven plugin-styringskommandoer forbedrer byggeprocessen, automatiserer arbejdsgange og opretholder høje standarder for projektkvalitet og konsistens.
Montering & Distribution
Mavens montage- og distributionsfunktionalitet giver udviklere mulighed for at pakke deres projekter i forskellige formater til distribution. Du kan bruge disse til at oprette eksekverbare JAR'er, bundtede applikationer eller tilpassede distributioner, der inkluderer afhængigheder og andre ressourcer. Her vil vi dække vigtige Maven-kommandoer til montering og distribution.
mvn assembly:assembly
Denne kommando opretter en samling for projektet. En assembly er en distribuerbar pakke, der kan omfatte binære filer, kildekode, afhængigheder og andre ressourcer. Denne kommando bruger Assembly Plugin til at generere disse pakker baseret på den angivne assembly descriptor.
mvn assembly:directory
Denne mvn-kommando opretter mappestrukturen for samlingen uden egentlig at oprette arkivfilen. Denne kommando er nyttig til at teste og verificere indholdet og strukturen af samlingen, før den pakkes.
At lære at bruge Mavens monterings- og distributionskommandoer kan hjælpe dig meget med at pakke og distribuere dine applikationer.
Kommandoer til generering af websteder
Mavens webstedskommandoer er en fantastisk måde at dokumentere projekter på. Disse kommandoer skaber omfattende dokumentationswebsteder til dine projekter. Her vil vi dække de væsentlige webstedskommandoer og deres funktioner:
mvn site
Kommandoen mvn site genererer projektets webstedsdokumentation og inkluderer information om projektet, såsom projektresumé, afhængighedsrapporter, plugin-brug og mere.
mvn site:deploy
Du kan bruge denne kommando til at implementere det genererede websted til en ekstern server. Dette er nyttigt til at gøre dokumentationen tilgængelig for et bredere publikum, såsom teammedlemmer eller offentligheden.
mvn site:stage
Denne kommando iscenesætter webstedet til en lokal mappe. Du kan bruge denne kommando til at få vist webstedet lokalt, før du installerer det på fjernserveren.
Pæn og organiseret dokumentation er så vigtig i udviklingen af et projekt. Maven site-kommandoen giver dig mulighed for at have alt på plads og have bedre kommunikation inden for udviklingsteams.
WAR & JAR kommandoer
Som udvikler ved du helt sikkert, at det at kunne pakke dine applikationer i forskellige formater er så vigtigt i udviklingsprocessen. Maven giver dig mulighed for at pakke Java-applikationer i forskellige formater, herunder WAR (Web Application Archive) og JAR (Java Archive) filer. Betydningen af disse pakkeformater bliver tydelig, når du vil implementere applikationer til servere og distribuere biblioteker. Her dækker vi de vigtigste mvn-kommandoer til generering af WAR- og JAR-filer:
mvn war:war
Denne kommando kompilerer dit projekt og pakker det ind i en WAR-fil. Når du kører denne kommando, genererer Maven en WAR-fil i dit projekts målbibliotek.
mvn jar:jar
Denne kommando kompilerer dit projekt og pakker det ind i en JAR-fil i dit projekts målmappe.
Disse to kommandoer hjælper dig med implementering og distribution. Så du kan bruge dem til effektivt at administrere og distribuere dine Java-applikationer.
Indberetning
Ethvert softwareprojekt kræver detaljeret rapportering for at spore fremskridt. Og Maven har kraftfulde plugins og mvn-kommandoer til at generere forskellige typer rapporter. Dette afsnit dækker to Maven-plugins, som du kan bruge til rapportering: Surefire og JaCoCo.
Surefire plugin
Du kan bruge dette plugin til at køre enhedstests i et Maven-projekt. Det genererer detaljerede rapporter om de test, der blev udført, så du kan være sikker på, at koden opfører sig, som du forventer, at den skal.
mvn surefire-report:report
Denne kommando genererer en enhedstestrapport i et format, der er let at læse og analysere. Med denne kommando opretter Maven en HTML-rapport i mål/sted bibliotek over dit projekt. Denne rapport indeholder oplysninger om antallet af test, der er kørt, bestået og mislykket, sammen med detaljerede stakspor for eventuelle fejl.
JaCoCo plugin
Du kan bruge dette plugin til at måle og rapportere kodedækning ved enhedstest. Så du kan sikre dig, at dine tests dækker kodebasen.
mvn jacoco:report
Hvis du vil se, hvilke dele af koden der er blevet testet, og hvilke der ikke er, giver denne kommando dig en kodedækningsrapport. Rapporten, som denne kommando opretter, er en HTML-rapport i mål/site/jacoco bibliotek, der viser detaljerede dækningsmålinger for klasser, metoder og kodelinjer.
Disse to plugins hjælper dig med at spore testresultater og kodedækning og giver dig nyttig indsigt i sundheden og kvaliteten af din kodebase.
Byg tilpasning
Maven giver dig mulighed for at skræddersy bygningen til at opfylde de specifikke krav til dit projekt. I dette afsnit vil vi dække, hvordan du bruger Maven-profiler og egenskabsdefinitioner til bygningstilpasning.
Maven profiler
Med Maven-profiler kan du definere forskellige konfigurationer for dit projekt, som kan aktiveres baseret på forskellige faktorer som systemegenskaber, miljøvariabler eller brugerdefinerede forhold. Det betyder, at du kan tilpasse byggeprocessen til forskellige miljøer, såsom udvikling, test og produktion. Du kan definere profiler i din pom.xml fil under <profiler> afsnit. Og den -p valgmulighed efterfulgt af profil-id vil aktivere profilen for dig.
Ejendomsdefinitioner
Maven-egenskaber giver dig mulighed for at definere værdier, der kan genbruges i hele din pom.xml fil. Disse egenskaber kan specificeres i pom.xml, via kommandolinjen eller i eksterne egenskabsfiler. Du kan definere egenskaber i <egenskaber> afsnit af din pom.xml. Efter at have defineret dem kan du bruge disse egenskaber i hele pom.xml fil.
Tilpasning af byggeprocessen i Maven kan hjælpe dig med at tilpasse dit projekt til forskellige miljøer og krav. Ved at bruge profiler kan du skifte mellem forskellige build-opsætninger, og ved at bruge egenskaber kan du genbruge og administrere værdier effektivt.
Konklusion
Denne blog gav en omfattende introduktion til Maven, mens du gik gennem hvert trin i processen med at udvikle en Java-applikation. Som et kraftfuldt automatiseringsværktøj til Java-projekter har maven forskellige kommandoer og muligheder for hver fase af udviklingen, og at vide, hvordan man arbejder med disse kommandoer og være på toppen af dem, ændrer kvaliteten af din udviklingsproces til det bedre.
FAQ
Hvad bruges Maven til?
Maven er et byggeautomatiserings- og projektstyringsværktøj til Java-projekter. Det forenkler byggeprocessen, styrer projektafhængigheder og giver en standardiseret projektstruktur. Maven understøtter også projektdokumentation, rapportering og distribution.
Hvad er POM i Maven?
Maven er et værktøj, der automatiserer byggeprocessen og afhængighedsstyring for Java-projekter. POM (Project Object Model) er en XML-fil i Maven, der indeholder information om projektet og konfigurationsdetaljer, der bruges af Maven til at bygge projektet. POM-filen definerer projektafhængigheder, plugins, mål og andre build-konfigurationer.