Oldalak

2015. május 14., csütörtök

Maven multimodul projekt létrehozása

A sokféle projektstruktúra közül nekem az tetszett meg amikor a projektet külön bontjuk modulokra, amennyire logikusnak tartjuk és abba pakoljuk az osztályainkat.

Egy alap n rétegű enterprise struktúra tartalmaz minimum három réteget. Van integrációs, szolgáltatási, illetve megjelenítési réteg. Természetesen a konkrét feladat fogja meghatározni hogy hogyan szabdaljuk szét a projektjeinket.

Ez a Maven struktúra az úgynevezett multimodul struktúra. A lényege hogy egyetlen Maven projekt alatt több Maven modult is létrehozunk szétválasztva ezzel az alkalmazásunk osztályait.
A fordításkor gyakorlatilag egyetlen ear állományt kapunk ami tartalmazni fogja a megadott strulktúrában a jar fájlokat amik vagy az EJB konténerbe, vagy az ACC-be (Application Client Container) fognak betöltődni, illetve tartalmazza majd a war fájlunkat, ami pedig a web konténerbe fog kerülni.

A Maven fog gondoskodni arról hogy összecsomagolja az egész alkalmazást egyetlen ear fájlba, ami könnyen deployolható (telepíthatő) az alkalmazásszerverbe (pl GlassFish).

Hozzunk létre egy Maven projektet.
New/Other.../Maven/Maven project

Teljesen üres projektet akarunk nem kell archetípus, ezért a Create a simple project (skip archetype selection) opció legyen bejelölve!


Group Id és Artifact Id megadása után a Packaging legyen pom. Ezzel mondjuk meg hogy további modulokat fog tartalmazni a projekt. 

A szülő projekten hozzuk létre a Maven modulokat az integrációs és a szolgáltatási rétegnek.
New/Other.../Maven/Maven module

Itt is egyszerű projekt kell és a Parent projektnek adjuk meg a pom projektünket.
Egyből jöhet a Finish!

A szolgáltatási rétegnek ugyan így hozzunk létre egy modult.
Ezekből a modulokból jar fájlok lesznek. Ezt ugyan nem láttuk mert egyből Finish-t nyomtunk a létrehozáskor, de ha Next-el megyünk tovább, akkor látható hogy alapértelmezésnek jar van beállítva a Packaging-nál. Ebből kifolyólag a modulok szerkezete más lesz.


Végül a szülő projekten hozzuk létre a Maven modulként a megjelenítési rétegnek a web projektet is. 
New/Other.../Maven/Maven module

Itt most egy web modult fogunk létrehozni amihez egy archetípust fogunk használni.
Ezért a Create a simple project (skip archetípe selection) opció NE legyen bejelölve.
Next gombbal továbblépünk...

Az archetípusok közül válasszuk ezt: webapp-javaee6
Nekem nem volt benne a listában ez az archetípus. Ezért a Configure... gombon keresztül elérhető beállítópanelen felvettem Remote tárolóként ezt: http://repo.maven.apache.org/maven2
Ezután már elérhetővé vált. Próbáltam az alatta lévő webapp-javaee7 típust, de ott a letöltés sikertelen volt...
Next továbblépünk

Ezen a képernyőn a Package értéknek amit felajánl azt írjuk át a Group Id-ben található értékre.
Finish és készen is van.

Ezután a projektünk valahogy így néz ki:



A presentation modulban a hibákat javítsuk. 

A 10 és 12 sorokban látható groupId illetve verziószám nem kell, ezeket töröljük.
A 51-75 sorokban látható a maven-dependency-plugin. Ezt is töröljük ki.

Kész vagyunk, mentsük a konfigurációs fájlt.

A fájlrendszert ha megnézzük akkor látható hogy minden modulnak van pom.xml fájlja. Mindegyik pom.xml-ben szerepel a <parent> amiben a szülőprojektre hivatkozunk.

Most állítsuk be a függőségeket. Ezt az alkalmazás határozza meg igazából. A presentation függ a service-től, a service pedig a integration-től. Ehhez a modulok pom.xml-jébe fel kell venni a <dependencies> blokkba a következő szerint (ez a presentation modul pom-ja):

  1. <dependency>
  2.         <groupId>hu.bucsupe.test</groupId>
  3.         <artifactId>HelloEEWorld-service</artifactId>
  4.         <version>0.0.1-SNAPSHOT</version>
  5. </dependency>

A service modul pomjában a HelloEEWorld-integration modult kell megadni. Mivel ez a modul egy üres modul volt (nem volt archetipus) ezért itt még nincs semmiféle dependencia, úgyhogy a teljes függőségi deklarációt meg kell adni, azaz <dependencies> tagok közé kell illeszteni a függőséget.

  1. <dependencies>   
  2.     <dependency>
  3.         <groupId>hu.bucsupe.test</groupId>
  4.         <artifactId>HelloEEWorld-integration</artifactId>
  5.         <version>0.0.1-SNAPSHOT</version>
        
    </dependency>
  6. </dependencies>

Most hogy a függőségek is be vannak állítva próbáljuk ki hogy az összerakott multimodul projektünk jól be van-e állítva. Ehhez üres osztályokat fogunk felvenni, hogy lássuk a feloldások megtörténnek-e. Később ezeket az üres osztályokat (vagy helyettük másokat) kell implementálnunk és kész az Enterprise alkalmazásunk.

Az integration modulba hozzuk létre a TestDao osztályt.
Ez fogja az adatbázissal tartani a kapcsolatot. Adatokat szolgáltat a TestService felé.

A service modulban hozzuk létre a TestService osztályt.
Ez fogja megvalósítani az üzleti logikát és kiszolgálja a felhasználói interfészt

A presentation modulba hozzuk létre a a TestServlet nevű servletet. Figyelem itt nem osztályt hanem Servlet-et kell választani a menüben!
Ez a servlet fogja adni a felhasználói interfészt, ami a TestService-tól kapja az adatokat.


Miután készek a teszt osztályok, hivatkozzanak is ezek egymásra.

A TestServlet osztályba vegyünk fel privátként egy TestService tagot, illetve a TestService osztályba privátként egy TestDao tagot.

Ha valamilyen dependenciát felveszünk a szülő modulba (HelloEEWorld) akkor az mindhárom modulban elérhető lesz.


Ezzel elkészült az alkalmazás váza kész a projekt, össze van drótozva a integration rétegtől a presentation rétegig minden. Kezdődhet a fejlesztés! :)

Forrás:
Maven multi module project : javavids
StackOverflow: How do I configure a Java EE maven project in Eclipse?





Nincsenek megjegyzések:

Megjegyzés küldése