Automatisering og udviklerværktøjer er uden tvivl blandt de vigtigste aspekter i ethvert projekt. I denne blog vil vi fokusere på Maven. Maven er et kraftfuldt automatiseringsværktøj til Java-projekter. Det forenkler byggefasen og skaber en ensartet struktur på tværs af projekter, hvilket gør dem lettere at styre og forstå. Denne guide dækker næsten alt inden for Maven - fra en bred vifte af kommandoer og indstillinger, der streamliner dit udviklingsflow. Vi udforsker forskellige aspekter som Server- og Container-management, Source Control Management (SCM) og GPG til signering af artifacts. Derudover ser vi på specialiserede kommandoer til Plugin-management, Assembly & Distribution samt generering af projektwebsteder og rapporter. Når du når slutningen af denne guide, vil du have en grundig forståelse af Maven-kommandoer og indstillinger.
- Oversigt over Maven; Projektets livscyklus
- Afhængighedsstyring
- Udførelse
- Server- og Container-management
- SCM (Styring af Versionskontrol)
- GPG (GNU Privacy Guard)
- Frigivelsesstyring
- Arketype
- Plugin-administration
- Montering & Distribution
- Kommandoer til generering af websteder
- WAR & JAR-kommandoer
- Rapportering
- Byg Brugerdefinition
- Konklusion
- Ofte stillede spørgsmål
Oversigt over Maven; Projektets livscyklus
På jiddisch betyder ordet Maven "ophobning af viden". Dette betyder siger meget om Mavens kraft som et automatiseringsværktøj til Java-projekter. Maven gør byggefasen og projektledelse meget simpel. Det gør den ved at automatisere forskellige opgaver og tilbyde et ensartet byggesystem.
For at få en klar forståelse af, hvordan Maven fungerer, lad os nedbryde konceptet bag Projektets objektmodel (POM). POM er en XML-fil, der indeholder oplysninger om projektet og konfigurationsdetaljer. Maven bruger POM som grundlaget for sit arbejde. Maven henter altså projektets afhængigheder, build-directory, source-directory, test source-directory og goals fra denne kilde for at operere.
Når du først har defineret projektet og dets afhængigheder fra pom.xml, vil Maven læse pom-filen hver gang du kører en Maven-kommando 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 sekvensen af faser, som dit projekt skal gennemgå. Hver fase repræsenterer et trin i livscyklussen og udfører specifikke opgaver som compilering af kildekode, kørsel af tests og pakning af koden i et distributionsformat. Alt dette gør Mavens projektlivscyklus til et vigtigt koncept at forstå. Lad os derfor kigge nærmere på Mavens livscyklusfaser:
- Valider: I denne fase valideres det, at projektet er korrekt, og alle nødvendige oplysninger er tilgængelige.
- Kompiler: I denne fase kompileres projektets kildekode.
- Test: I denne fase testes den kompilerede kildekode ved hjælp af en passende unit testing-rammeværk.
- Pakke: I denne fase pakkes den kompilerede kode i dens distribueringsformat (f.eks. JAR, WAR).
- Installér: I installationsfasen installeres pakken i det lokale lager og bliver tilgængelig for andre projekter på samme maskine.
- Implementer: I denne fase kopieres den endelige pakke til det fjerne lager for at dele med andre udviklere og projekter.
Hver af disse faser har en tilsvarende mvn-kommando, som vi dækker i de kommende afsnit af vores Maven-spickzettel. Disse vil være de vigtigste kommandoer til at styre dit projekts build-proces.
Afhængighedsstyring
En af Mavens kernefunktioner er afhængighedsstyring. Denne funktion er så betydningsfuld for Mavens ydeevne, fordi den gør det nemmere at håndtere projektafhængigheder.
Sådan administrerer Maven afhængigheder
Maven bruger et centralt lager, kendt som Maven Central Repository, hvor et stort udvalg af biblioteker og plugins er hostet. Når et projekt kræver en afhængighed, downloader Maven automatisk de påkrævede biblioteker fra det centrale lager og gemmer dem i det lokale lager. Dette lokale lager er en cache på din lokale maskine, som reducerer downloadtider for fremtidige builds.
Afhængigheder i Maven angives i pom.xml filen under afsnittet <dependencies> . Hver afhængighed defineres ved et sæt koordinater: groupId, artifactId, og version.
Afhængighedsomfang
Når du arbejder med Maven, kan du angive omfanget af afhængigheder. Denne faktor definerer klassestien-synlighed og livscyklusfasen for afhængigheden. Så du kan vide, hvilken fase der kræver denne afhængighed. De almindelige omfang er:
- Kompiler: Dette er standardomfanget og bruges, når intet omfang er angivet. Afhængigheder med dette omfang er tilgængelige i alle build-faser og er inkluderet i den endelige pakke.
- Leveret: Vi forventer, at afhængigheder med dette omfang er klar af køremiljø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 påkrævede under udførelse. De er inkluderet i runtime-klassestien.
- Test: Disse afhængigheder er kun nødvendige til kompilering og kørsel af tests. De er ikke inkluderet i runtime eller den endelige pakke.
- System: System-omfanget minder om provided-omfanget, men du skal selv levere JAR'en, som Maven vil bruge. JAR'en skal være tilstede 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 det klart, forestil dig, at dit projekt afhænger af spring-boot-starter-web, så 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 teorien om, hvordan Maven styrer afhængigheder, lad os se, hvordan man arbejder med det i praksis:
mvn dependency:resolve
Denne kommando kan løse og vise alle afhængigheder, som dit projekt kræver. 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 få en træstruktur over dine projektafhængigheder. Den 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 artifacts. Den hjælper dig med at rydde op i dit projekt og undgå unødvendig ballast.
Mavens afhængighedsstyring gør din udvikling enkel. Det hjælper dig også med at undgå almindelige fejlmistag og holde projektstrukturen ren og velorganiseret.
Udførelse
Udførelse i Maven betyder at køre specifikke opgaver eller mål inden for projektet. Disse opgaver kan spænde fra at køre Java-programmer til at eksekvere eksterne scripts eller kommandoer. Maven tilbyder kraftfulde plugins, der gør disse udførelser enkle. Det er endnu et Maven-feature, der gør det til et glimrende værktøj til at automatisere forskellige dele af dit projektarbejdsflow. Så lad os gennemgå vigtige Maven-udførelseskommandoer:
mvn exec:java
Denne kommando bruges til at eksekvere en Java-klasse i dit projekt. Det er nyttigt til at køre main-klasser eller teste selvstændige Java-programmer uden først at pakke dem.
mvn exec:exec
Denne kommando lader dig eksekvere 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 build-proces.
Udførelseskommandoer 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. Alt i alt kan de hjælpe dig med at styre dine opgaver meget mere effektivt.
Server- og Container-management
At styre servere og containere er et vigtigt trin i udvikling og udrulning af webapplikationer. Maven letter denne proces med kraftfulde plugins, der lader dig køre, udrulling og administrere webapplikationer på forskellige servere og containere direkte fra din build-proces. Her er nogle vigtige Maven-kommandoer til at styre servere og containere:
mvn tomcat7:run
Denne kommando kører din webapplikation ved hjælp af Apache Tomcat. Det er nyttigt til lokal udvikling og test og lader dig hurtigt udrulling og teste din webapplikation uden at oprette et fuldstændigt servermiljø.
mvn jetty:run
Denne kommando kører din webapplikation ved hjælp af en populær webserver kaldet Jetty. Som Tomcat er Jetty glimrende til udvikling og test på grund af dets lette vægt og hurtige udruller-muligheder.
Sådan fungerer Server- og Container-management
Maven bruger plugins som tomcat7-maven-plugin og jetty-maven-plugin til at administrere serveroperationer. Disse plugins lader dig starte, stoppe og konfigurere servere som en del af din build-livscyklus. Så udvikling og test af webapplikationer i et konsistent miljø bliver meget nemmere. Brug af Maven-profiler til at definere serverkonfigurationer for forskellige miljøer hjælper dig med at styre forskellige indstillinger for udvikling, test og produktion. Dette Maven-feature lader dig også konfigurere logging og overvågning inden for dine server-plugins. Så kan du holde øje med serveraktiviteter og fejlfinde problemer hurtigt.
SCM (Styring af Versionskontrol)
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 checke kode ind, checke kode ud og opdatere projektversioner. Her er nogle af de vigtige Maven SCM-kommandoer og deres indstillinger:
mvn scm:checkin
Du kan bruge denne mvn-kommando til at checke projektets ændringer ind i SCM. Denne kommando hjælper med at automatisere processen med at committte ændringer til source control-lageret. Så de seneste opdateringer bliver bestemt gemt og delt med teamet.
mvn scm:checkout
Denne Maven-kommando bruges til at checke projektets kode ud fra SCM-lageret, og det er nyttigt til at få en lokal kopi af projektet. Så er du altid sikker på, at du arbejder med den seneste version af kildekoden.
mvn scm:update
Denne mvn-kommando opdaterer den lokale arbejdskopi af projektet med de seneste ændringer fra SCM-lageret. Denne kommandos job er at sikre, at din lokale kodebase er synkroniseret med lageret og inkluderer eventuelle 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 endnu ikke committed til lageret.
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 betydningsfulde 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 forbedrer din effektivitet og samarbejde inden for dit udviklingsteam.
GPG (GNU Privacy Guard)
GNU Privacy Guard (GPG) er kryptografisk software, der lader brugere kryptere og signere data og kommunikation. I Maven-sammenhæng bruges GPG til at signere artefakter for at sikre deres autenticitet og integritet. Dette er vigtig, når du udrullar artefakter til offentlige lagre, da det lader brugere bekræfte, at artefakterne ikke er manipuleret. Maven tilbyder flere kommandoer til at arbejde med GPG og letter processen med at signere og udrulling af 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 build-processen til at signere JARs, WARs og andre typer artefakter før udrulling.
mvn gpg:sign-and-deploy-file
Denne mvn-kommando kombinerer signering og udrulling af en fil i et enkelt trin. Du kan bruge den, når du vil signere en artefakt og straks udrulling den til et lager. Dette strømliner din proces og sikrer, at du vil signere en artefakt og straks udrulling den til et lager.
Indlemmelse af GPG-signering i din Maven build-proces forbedrer sikkerhed og pålidelighed af din software. Så bliver det nemmere for brugere at stole på og verificere dine artefakter.
Frigivelsesstyring
Release-styring er så vigtig i softwareudvikling. Med effektiv release-styring kan du sikre, at softwareversioner håndteres, pakkes og udrulles korrekt. Maven tilbyder et sæt kommandoer til at automatisere og strømline release-processen. Lad os se på nogle eksempler på Maven-indstillinger og kommandoer til release-styring:
mvn release:prepare
Denne mvn-kommando bruges til at forberede et projekt til udgivelse. Den udfører opgaver som at kontrollere, at der ikke er ugemte ændringer, opdatering af versionsnumre i pom.xml filerne, mærkning af udgivelsen i versionsstyringssystemet (SCM), og opdatering af pom.xml filerne til den næste udviklerversion. Den sikrer, at projektet er i en stabil tilstand og klar til udgivelse.
mvn release:perform
Denne kommando udfører den faktiske udgivelseproces. Den henter projektet fra SCM ved det mærke, som kommandoen release:prepare oprettede, bygger projektet og udrulles artefakterne til det angivne lager. Denne kommando sikrer, at artefakterne bygges fra den eksakte kodetilstand på tidspunktet for udgivelsesforberedelsen.
mvn release:clean
Denne mvn-kommando fjerner alle sikkerhedskopier af udgivelsesbeskrivere, som oprettes under release:prepare processen. Den rydder op i miljøet og sikrer, at der ikke er efterladte filer fra tidligere udgivelsesforsøg. Denne kommando giver dig et rent arbejdsområde og forhindrer mulige problemer ved næste udgivelser.
Brug af udgivelsestyringskommandoer strømliner udgivelseprocesser, forbedrer softwarekvaliteten og sikrer, at udgivelser styres effektivt.
Arketype
Hvis du er udvikler, der ønsker at oprette projektstrukturer baseret på foruddefinerede skabeloner, bør du overveje at bruge Maven Archetype-pluginnet. Her vil vi diskutere de primære Maven-kommandoer forbundet med archetypes.
mvn archetype:generate
Du kan bruge denne mvn-kommando til at oprette et nyt projekt fra en eksisterende skabelon eller "archetype". Denne kommando guider brugeren gennem valg af en archetype og konfiguration af det nye projekt. Således hjælper det dig med at konfigurere et velstruktureret projekt.
mvn archetype:catalog
Denne kommando viser tilgængelige archetypes, som kan bruges til at generere nye projekter. Det er nyttigt til at udforske de forskellige skabeloner, som Maven-fællesskabet stiller til rådighed, og til at afgøre, hvilken archetype der bedst passer 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 enterprise-projekt, giver Maven-archetypes et værdifuldt udgangspunkt.
Plugin-administration
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 dækker væsentlige kommandoer til Maven-pluginadministration.
mvn plugin:download
Denne kommando bruges til at downloade et specifikt Maven-plugin fra lageret. Du kan bruge den, når du ønsker at sikre, 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 den, når du har brug for at forstå de forskellige mål, parametre og konfigurationer, der er tilgængelige for et plugin.
Disse Maven-pluginadministrationskommandoer forbedrer build-processen, automatiserer arbejdsgange og opretholder høje standarder for projektets kvalitet og konsistens.
Montering & Distribution
Mavens assembly- og distributionfunktionalitet giver udviklere mulighed for at pakke deres projekter i forskellige formater til distribution. Du kan bruge disse til at oprette eksekverbare JAR-filer, bundlede applikationer eller brugerdefinerede distributioner, der omfatter afhængigheder og andre ressourcer. Her vil vi dække vigtige Maven-kommandoer til assembly og distribution.
mvn assembly:assembly
Denne kommando opretter en assembly for projektet. En assembly er en distributiv pakke, som 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-deskriptor.
mvn assembly:directory
Denne mvn-kommando opretter mappestrukturen i assemblyen uden faktisk at oprette arkivfilen. Denne kommando er nyttig til at teste og verificere indholdet og strukturen af assemblyen, før den pakkes.
At lære at bruge Mavens assembly- og distributionskommandoer kan hjælpe dig meget med at pakke og distribuere dine applikationer.
Kommandoer til generering af websteder
Mavens site-kommandoer er en glimrende måde at dokumentere projekter på. Disse kommandoer opretter omfattende dokumentationswebsteder for dine projekter. Her vil vi dække de væsentlige site-kommandoer og deres funktioner.
mvn site
Kommandoen mvn site genererer projektets site-dokumentation og indeholder oplysninger om projektet, såsom projektsammenfattelse, afhængighedsrapporter, pluginanvendelse og meget mere.
mvn site:deploy
Du kan bruge denne kommando til at udbrede det genererede site til en fjernserver. Dette er nyttigt til at gøre dokumentationen tilgængelig for et bredere publikum, såsom teammedlemmer eller offentligheden.
mvn site:stage
Denne kommando iscenesat siteet i en lokal mappe. Du kan bruge denne kommando til at få forhåndsvisning af siteet lokalt, før du udbringer det til fjernserveren.
Pæn og velorganiseret dokumentation er afgørende i udviklingen af et projekt. Kommandoen mvn site giver dig mulighed for at få alt på plads og muliggør bedre kommunikation inden for udviklingsteams.
WAR & JAR-kommandoer
Som udvikler ved du helt sikkert, hvor vigtigt det er at kunne pakke dine applikationer i forskellige formater under udviklingen. Maven gør det muligt 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 skal deploye applikationer til servere og distribuere biblioteker. Her dækker vi de vigtigste mvn kommandoer til at generere WAR og JAR filer:
mvn war:war
Denne kommando kompilerer dit projekt og pakker det som en WAR fil. Når du kører denne kommando, genererer Maven en WAR fil i projektets target-mappe.
mvn jar:jar
Denne kommando kompilerer dit projekt og pakker det som en JAR fil i projektets target-mappe.
Disse to kommandoer hjælper dig med deployment og distribution. Du kan bruge dem til effektivt at administrere og distribuere dine Java applikationer.
Rapportering
Ethvert softwareprojekt har brug for detaljeret rapportering til at spore fremskridt. Maven har kraftige 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 unit tests i et Maven projekt. Det genererer detaljerede rapporter om de tests, der blev kørt, så du kan være sikker på, at koden opfører sig som forventet.
mvn surefire-report:report
Denne kommando genererer en unit test rapport i et letlæseligt format. Med denne kommando opretter Maven en HTML rapport i target/site mappen i dit projekt. Denne rapport indeholder oplysninger om antallet af tests, der blev kørt, antal beståede og mislykkede tests, samt detaljerede staktraces for eventuelle fejl.
JaCoCo Plugin
Du kan bruge dette plugin til at måle og rapportere kodedækning via unit tests. På denne måde kan du 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 target/site/jacoco mappen, der viser detaljerede dækningsmetrikker for klasser, metoder og kodelines.
Disse to plugins hjælper dig med at spore testresultater og kodedækning og giver dig nyttige indsigter i sundheden og kvaliteten af din kodebasis.
Byg Brugerdefinition
Maven gør det muligt at tilpasse buildet til de specifikke krav i dit projekt. I dette afsnit dækker vi, hvordan du bruger Maven profiler og egenskabsdefinitioner til tilpasning af buildet.
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 betingelser. Det betyder, at du kan tilpasse buildprocessen til forskellige miljøer, såsom udvikling, test og produktion. Du kan definere profiler i din pom.xml filen under afsnittet <profiles> sektion. Og -p muligheden efterfulgt af profil-id vil aktivere profilen for dig.
Egenskabsdefinitioner
Maven egenskaber gør det muligt at definere værdier, der kan genbruges i hele dit pom.xml dokument. Disse egenskaber kan specificeres i pom.xml, via kommandolinjen eller i eksterne egenskabsfiler. Du kan definere egenskaber i <properties> del af din pom.xml. Efter at have defineret dem kan du bruge disse egenskaber i hele pom.xml fil.
Tilpasning af buildprocessen 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 buildopsætninger, og ved at bruge egenskaber kan du genbruge og administrere værdier effektivt.
Konklusion
Denne blog har givet en omfattende introduktion til Maven, mens den har ført dig gennem hvert trin i processen med at udvikle en Java applikation. Som et kraftigt automatiseringsværktøj til Java projekter har Maven forskellige kommandoer og muligheder for hver fase af udviklingen, og det at vide, hvordan man arbejder med disse kommandoer og at være på toppen af dem, forbedrer kvaliteten af din udviklingproces markant.
Ofte stillede spørgsmål
Hvad bruges Maven til?
Maven er et build automation og project management værktøj til Java projekter. Det forenkler buildprocessen, administrerer projektafhængigheder og leverer en standardiseret projektstruktur. Maven understøtter også projektdokumentation, rapportering og distribution.
Hvad er POM i Maven?
Maven er et værktøj, der automatiserer buildprocessen og afhængighedsstyring til Java projekter. POM (Project Object Model) er en XML fil i Maven, der indeholder oplysninger om projektet og konfigurationsdetaljer, som Maven bruger til at bygge projektet. POM filen definerer projektafhængigheder, plugins, mål og andre buildkonfigurationer.