Multimodulprosjekt med Maven

1. Oversikt

I denne veiledningen viser vi hvordan du bygger et multimodulprosjekt med Maven.

Først vil vi diskutere hva som er et multimodulprosjekt og se på fordelene ved å følge denne tilnærmingen. Så setter vi opp prøveprosjektet vårt. For en god introduksjon til Maven, sjekk ut denne veiledningen.

2. Mavens multimodulprosjekt

Et multimodulprosjekt er bygget fra en aggregator POM som administrerer en gruppe submoduler. I de fleste tilfeller er aggregatoren lokalisert i prosjektets rotkatalog og må ha emballasje av typen pom.

Nå er delmodulene vanlige Maven-prosjekter, og de kan bygges separat eller gjennom aggregatoren POM.

Ved å bygge prosjektet gjennom aggregatoren POM, er hvert prosjekt som har en annen emballasjetype enn pom vil resultere i en innebygd arkivfil.

3. Fordeler ved bruk av multimoduler

Den betydelige fordelen med å bruke denne tilnærmingen er at vi kan redusere duplisering.

La oss si at vi har et program som består av flere moduler, la det være en front-end-modul og en back-end-modul. Nå jobber vi med begge og endrer funksjonalitet som påvirker de to. I så fall, uten et spesialisert byggeverktøy, må vi bygge begge komponentene hver for seg eller skrive et skript som vil kompilere koden, kjøre tester og vise resultatene. Etter at vi får enda flere moduler i prosjektet, blir det vanskeligere å administrere og vedlikeholde.

I den virkelige verden kan prosjekter dessuten trenge visse Maven-plugins for å utføre forskjellige operasjoner i løpet av byggesyklusen, dele avhengigheter og profiler eller inkludere andre BOM-prosjekter.

Derfor, når vi bruker multimoduler, kan vi bygge programmets moduler i en enkelt kommando og hvis ordren betyr noe, vil Maven finne ut av dette for oss. Vi kan også dele en enorm mengde konfigurasjon med andre moduler.

4. Foreldre-POM

Maven støtter arv på en måte som hver pom.xml-fil har den implisitte foreldren POM, den heter Super POM og kan være lokalisert i Maven-binærfiler. Disse to filene slås sammen av Maven og danner Effective POM.

Derfor kan vi lage våre egen pom.xml-fil som vil tjene oss som overordnet prosjekt. Deretter kan vi inkludere der alle konfigurasjoner med avhengigheter og sette dette som foreldre til våre barnemoduler, slik at de vil arve fra det.

Foruten arven gir Maven forestillingen om aggregering. Foreldre-POM som utnytter denne funksjonaliteten kalles en samlet POM. I utgangspunktet er denne typen POM erklærer modulene eksplisitt i sin pom.xml-fil.

5. Undermoduler

Undermoduler eller delprosjekter er vanlige Maven-prosjekter som arver fra foreldrenes POM. Som vi allerede vet, lar vi arv dele konfigurasjonen og avhengighetene med undermoduler. Imidlertid, hvis vi ønsker å bygge eller frigjøre prosjektet vårt i ett skudd, må vi erklære våre submoduler eksplisitt i foreldrenes POM. Til syvende og sist vil vår foreldre-POM være foreldre så vel som den samlede POM-en.

6. Bygg applikasjonen

Nå som vi forstår Mavens undermoduler og hierarki, la oss bygge et eksempel på et program for å demonstrere dem. Vi bruker Mavens kommandolinjegrensesnitt for å generere prosjektene våre.

Denne appen vil bestå av tre moduler, som vil representere:

  • De kjerne del av domenet vårt
  • Et nett service gir noen REST APIer
  • EN webapp som inneholder brukervennlige nettaktiva av noe slag

Siden vi vil fokusere på Maven, vil implementeringen av disse tjenestene forbli udefinert.

6.1. Genererer foreldre-POM

La oss først lage et overordnet prosjekt:

mvn arketype: generer -DgroupId = org.baeldung -DartifactId = foreldre-prosjekt

Når foreldrene er generert, må vi åpne pom.xml filen som ligger i foreldrekatalogen og endre emballasjen til pom.

pom

Ved å sette emballasjen til pom-typen, erklærer vi at prosjektet vil tjene som en forelder eller en samler - det vil ikke produsere ytterligere gjenstander.

Nå som aggregatoren vår er ferdig, kan vi generere submodulene våre.

Vi må imidlertid merke oss at dette er stedet der all konfigurasjonen som skal deles ligger og til slutt brukes på nytt i underordnede moduler. Vi kan blant annet benytte oss av avhengighetLedelse eller pluginManagement her.

6.2. Opprette undermoduler

Som vår foreldre ble POM kalt foreldre-prosjekt, må vi sørge for at vi er i foreldrekatalogen og kjører generere kommandoer:

cd overordnet prosjekt mvn arketype: generer -DroupId = org.baeldung -DartifactId = kjerne mvn arketype: generer -DroupId = org.baeldung -DartifactId = tjeneste mvn arketype: generer -DgroupId = org.baeldung -DartifactId = webapp

Legg merke til kommandoen som brukes. Det er det samme som vi brukte for foreldrene. Saken her er at disse modulene er vanlige Maven-prosjekter, men likevel anerkjente Maven at de er nestede. Da vi endret katalogen til foreldre-prosjekt, fant det at foreldrene har emballasje av typen pom og modifiserte begge deler pom.xml filer deretter.

Etter det vil Maven generere tre undermoduler og modifisere foreldrenes for oss pom.xml fil ved å legge til noen koder:

 webapp for kjernetjeneste 

Nå erklærer foreldrene eksplisitt aggregerte moduler.

Neste, når du kjører mvn-pakke kommandoen i den overordnede prosjektkatalogen, vil Maven bygge og teste alle tre modulene.

Videre vil Maven Reactor analysere prosjektet vårt og bygge det i riktig rekkefølge. Så hvis vår webapp modul avhenger av tjenesten modul, vil Maven først bygge service, og så webapp.

Tross alt, hvis vi ønsker å dele hele konfigurasjonen med undermodulene våre, i deres pom.xml filer, må vi erklære foreldrene:

 org.baeldung foreldre-prosjekt 1.0-SNAPSHOT 

Vi må merke oss at submoduler bare kan ha en forelder. Vi kan imidlertid importere mange stykklisten. Mer informasjon om BOM-filene finner du i denne artikkelen.

6.3. Bygg prosjektet

Nå kan vi bygge alle tre modulene samtidig. I foreldrenes prosjektkatalog, kjør:

mvn-pakke

Dette vil bygge alle modulene, vi skal se følgende utdata av kommandoen:

[INFO] Skanner etter prosjekter ... [INFO] -------------------------------------- ---------------------------------- [INFO] Reactor Build Order: [INFO] overordnet prosjekt [INFO] core [INFO] service [INFO] webapp ... [INFO] Reaktorsammendrag: [INFO] overordnet prosjekt .......................... ........... SUKSESS [0.140 s] [INFO] kjerne .............................. ................. SUKSESS [2.195 s] [INFO] -tjeneste ........................ .................... SUKSESS [0.767 s] [INFO] webapp ..................... ........................ SUKSESS [0.572 s] [INFO] ------------------ -------------------------------------------------- ---- [INFO] BYGG SUKSESS [INFO] -------------------------------------- ----------------------------------

Reaktoren lister opp foreldre-prosjekt, men som det er pom skriv det er ekskludert, og bygningsresultatene er tre separate .krukke filer for alle andre moduler. I så fall forekommer bygg i tre av dem.

7. Konklusjon

I denne opplæringen diskuterte vi fordelene ved å bruke Maven multimoduler. Vi skilte også mellom vanlig Mavens foreldre-POM og samlet POM. Til slutt viste vi hvordan du setter opp en enkel multimodul å begynne å leke med.

Maven er et flott verktøy, men det er komplekst alene. Hvis du vil finne mer informasjon om Maven, kan du ta en titt på Sonatype Maven-referanse eller Apache Maven-guider. Hvis du søker avanserte bruksområder med Maven-moduler som er satt opp, kan du se hvordan Spring Boot-prosjektet utnytter bruken av det.

Alle kodeeksempler på Baeldung er laget med Maven, slik at du enkelt kan sjekke GitHub-prosjektnettstedet for å se forskjellige Maven-konfigurasjoner.


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