Viacmodulový projekt s Maven

1. Prehľad

V tomto tutoriáli si ukážeme, ako vytvoriť viacmodulový projekt s Mavenom.

Najskôr si povieme, čo je viacmodulový projekt, a pozrime sa na výhody plynúce z tohto prístupu. Potom nastavíme náš vzorový projekt. Dobrý úvod do Mavenu nájdete v tomto výučbe.

2. Viacmodulový projekt spoločnosti Maven

Viacmodulový projekt je zostavený z agregačného POM, ktorý spravuje skupinu podmodulov. Vo väčšine prípadov je agregátor umiestnený v koreňovom adresári projektu a musí mať typové balenie pom.

Teraz sú podmoduly pravidelnými projektmi Maven a môžu byť zostavené samostatne alebo prostredníctvom agregačného POM.

Vytvorením projektu prostredníctvom agregačného POM bude každý projekt, ktorý má iný typ balenia ako pom vyústi do vytvoreného archívneho súboru.

3. Výhody používania multimodulov

Významnou výhodou tohto prístupu je, že môžeme znížiť duplicitu.

Povedzme, že máme aplikáciu, ktorá sa skladá z niekoľkých modulov, nech je to front-end modul a back-end modul. Teraz pracujeme na oboch z nich a meníme funkčnosť, ktorá ich ovplyvňuje. V takom prípade bez špecializovaného nástroja na zostavenie budeme musieť zostaviť obe komponenty samostatne alebo napísať skript, ktorý by skompiloval kód, spustil testy a ukázal výsledky. Potom, keď do projektu dostaneme ešte viac modulov, bude ťažšie ho spravovať a udržiavať.

Okrem toho v skutočnom svete môžu projekty vyžadovať určité doplnky Maven na vykonávanie rôznych operácií počas životného cyklu zostavovania, zdieľanie závislostí a profilov alebo na zahrnutie ďalších projektov kusovníka.

Preto pri využívaní viacerých modulov môžeme zostavte moduly našej aplikácie do jedného príkazu a ak bude na objednávke záležať, Maven to vyrieši za nás. Tiež môžeme zdieľať obrovské množstvo konfigurácie s ostatnými modulmi.

4. Rodič POM

Maven podporuje dedičstvo takým spôsobom každý súbor pom.xml má implicitný rodičovský POM, volá sa Super POM a môžu byť umiestnené v binárnych súboroch Maven. Tieto dva súbory zlúčil Maven a tvoria efektívny POM.

Preto môžeme vytvárať naše vlastný súbor pom.xml, ktorý nám bude slúžiť ako nadradený projekt. Potom tam môžeme zahrnúť všetku konfiguráciu so závislosťami a nastaviť ju ako rodič našich podradených modulov, aby po nej dedili.

Okrem dedičstva poskytuje Maven pojem agregácie. Rodičovský POM, ktorý využíva túto funkciu, sa nazýva agregovaný POM. V podstate tento druh POM deklaruje svoje moduly výslovne vo svojom súbore pom.xml.

5. Čiastkové moduly

Submoduly alebo podprojekty sú bežné projekty Maven, ktoré dedia od nadradeného POM. Ako už vieme, dedenie nám umožňuje zdieľať konfiguráciu a závislosti s podmodulami. Ak by sme však chceli náš projekt postaviť alebo vydať naraz, musíme svoje submoduly výslovne deklarovať v nadradenom POM. Náš materský POM bude nakoniec materský aj súhrnný POM.

6. Vytvorenie aplikácie

Teraz, keď rozumieme Mavenovým podmodulom a hierarchii, zostavme si ukážkovú aplikáciu na ich demonštráciu. Na generovanie našich projektov použijeme rozhranie príkazového riadku Maven.

Táto aplikácia bude pozostávať z troch modulov, ktoré budú predstavovať:

  • The jadro súčasť našej domény
  • Web služby poskytovanie niektorých rozhraní REST API
  • A webapp ktoré obsahujú webové stránky nejakého druhu orientované na používateľa

Pretože sa zameriame na Maven, implementácia týchto služieb zostane nedefinovaná.

6.1. Generuje sa nadradený POM

Najskôr vytvorme nadradený projekt:

archív typu mvn: generate -DgroupId = org.baeldung -DartifactId = parent-project

Akonáhle je rodič vygenerovaný, musíme otvoriť pom.xml súbor umiestnený v nadradenom adresári a zmeňte obal na pom.

pom

Nastavením balenia na typ pom deklarujeme, že projekt bude slúžiť ako rodič alebo agregátor - neprodukuje ďalšie artefakty.

Teraz, keď je náš agregátor hotový, môžeme generovať naše podmoduly.

Musíme si však uvedomiť, že toto je miesto, kde sa nachádza všetka konfigurácia, ktorá sa má zdieľať, a prípadne znovu použiť v podradených moduloch. Okrem iného môžeme využiť dependencyManagement alebo pluginManagement tu.

6.2. Vytváranie submodulov

Ako bol pomenovaný náš rodič POM rodič-projekt, musíme sa uistiť, že sme v rodičovskom adresári a spustíme generovať príkazy:

archív typu cd rodič-projekt mvn: generate -DgroupId = org.baeldung -DartifactId = jadro mvn archetyp: generate -DgroupId = org.baeldung -DartifactId = služba mvn archetyp: generate -DgroupId = org.baeldung -DartifactId = webapp

Všimnite si použitý príkaz. Je to to isté, čo sme použili pre rodiča. Ide o to, že tieto moduly sú pravidelné projekty Maven, napriek tomu Maven rozpoznal, že sú vnorené. Keď sme zmenili adresár na rodič-projekt, zistilo sa, že rodič má balenie typu pom a upravil obe pom.xml súbory zodpovedajúcim spôsobom.

Potom Maven vygeneruje tri submoduly a upraví ich pre nás pom.xml súbor pridaním niekoľkých značiek:

 základná služba webapp 

Teraz náš rodič výslovne deklaruje agregované moduly.

Ďalej pri behu balíček mvn príkazom v nadradenom adresári projektu, Maven zostaví a otestuje všetky tri moduly.

Maven Reactor navyše analyzuje náš projekt a zostaví ho v správnom poradí. Takže, ak náš webapp modul závisí od služba modul, Maven najskôr postaví služby, potom webapp.

Nakoniec, ak chceme zdieľať všetku konfiguráciu s našimi submodulami v ich pom.xml súbory, budeme musieť vyhlásiť rodiča:

 org.baeldung parent-project 1.0-SNAPSHOT 

Musíme si uvedomiť, že podmoduly môžu mať iba jedného rodiča. Môžeme však importovať veľa kusovníkov. Viac podrobností o súboroch kusovníka nájdete v tomto článku.

6.3. Budovanie projektu

Teraz môžeme zostaviť všetky tri moduly naraz. V adresári projektu rodiča spustite:

balíček mvn

Takto sa zostavia všetky moduly, mali by sme vidieť nasledujúci výstup príkazu:

[INFO] Skenovanie projektov ... [INFO] -------------------------------------- ---------------------------------- [INFO] Objednávka zostavy reaktora: [INFO] nadradený projekt [INFO] jadrová [INFO] služba [INFO] webapp ... [INFO] Zhrnutie reaktora: [INFO] nadradený projekt .......................... ........... ÚSPEŠNOSŤ [0,140 s] [INFO] jadro .............................. ................. služba ÚSPECH [2,195 s] [INFO] ........................ .................... ÚSPECH [0,767 s] [INFO] webapp ..................... ........................ ÚSPECH [0,572 s] [INFO] ------------------ -------------------------------------------------- ---- [INFO] STAVEBNÝ ÚSPECH [INFO] -------------------------------------- ----------------------------------

Reactor uvádza zoznam rodič-projekt, ale ako to je pom typ je vylúčený a zostavenie má za následok tri samostatné .jar súbory pre všetky ostatné moduly. V takom prípade sa stavba uskutoční u troch z nich.

7. Záver

V tomto tutoriáli sme diskutovali o výhodách používania multi-modulov Maven. Tiež sme rozlišovali medzi normálnym Mavenovým rodičovským POM a agregovaným POM. Na záver sme si ukázali, ako nastaviť jednoduchý multi-modul, s ktorým sa začne hrať.

Maven je skvelý nástroj, ale je sám o sebe zložitý. Ak chcete nájsť viac informácií o Maven, pozrite si príručku Sonatype Maven alebo príručky Apache Maven. Ak hľadáte pokročilé možnosti nastavenia viacerých modulov Maven, pozrite sa, ako ich projekt Spring Boot využíva.

Všetky príklady kódov na Baeldungu sú zostavené pomocou Mavenu, takže môžete ľahko skontrolovať našu webovú stránku projektu GitHub a pozrieť si rôzne konfigurácie Mavenu.


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