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
Végül a szülő projekten hozzuk létre a Maven modulként a megjelenítési rétegnek a web projektet is.
![]() |
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... |
![]() |
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 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):
- <dependency>
- <groupId>hu.bucsupe.test</groupId>
- <artifactId>HelloEEWorld-service</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </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.
- <dependencies>
- <dependency>
- <groupId>hu.bucsupe.test</groupId>
- <artifactId>HelloEEWorld-integration</artifactId>
- <version>0.0.1-SNAPSHOT</version>
</dependency> - </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 |
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! :)
Maven multi module project : javavids
StackOverflow: How do I configure a Java EE maven project in Eclipse?