Teraz zajmiemy się warstwą DAO. Na początek w znany nam już sposób dołączymy do projektu generyczne dao: LINK. Dzięki temu metody dla warstwy DAO utworzymy zupełnie generycznie. Ale żeby to zrobić musimy mieć dostęp do naszych encji. Potrzebna jest więc zależność modułu dao od modułu entities. Jak ją dodać? Tak samo jak zależność zewnętrzną!

I już… Po odświeżeniu projektu (eclipse:eclipse) będziemy mogli w module dao korzystać z generycznego dao oraz wszystkich encji z modułu encji. Dla przykładu SeansDAOImpl:

Dodajmy zatem pozostałe zależności wewnętrzne zgodnie ze schematem:
przykład

Może się nasunąć pytanie: czy skoro moduł dao jest zależny do modułu entities, a moduł services od dao, to w module services też powinniśmy dodawać zależność do entities? Odpowiedź brzmi: tak! A to dlatego, że do pliku .jar modułu dao nie są załączane klasy z modułu entities a jedynie sama zależność od nich. Wyjaśni się to w dalszej części tego rozdziału.

by Yuppy:

Do modułu services w takim przypadku nie trzeba dodawać zależności z modułem entities. Tak jak piszesz, zależności są przechodnie, więc plik jar z encjami jak najbardziej w takim przypadku wyląduje w wynikowym archiwum war. Byłoby tak jak piszesz, jeśli zależność z modułem entities w module dao byłaby określona jako scope=provided.

Zależności dla modułu services:

oraz dla modułów client oraz worker:

Zbudujmy teraz cały projekt i zobaczmy co trafi do wynikowych plików .war aplikacji client oraz worker. Interesuje nas folder z załączanymi bibliotekami, a więc WEB-INF\lib.

Skąd tego aż tyle? Przecież kino-worker ma jedynie trzy zależności… I nie ma zależności do kino-dao, który też został załączony! To prawda ale maven nas nie oszukuje i nie załącza niczego przypadkiem. Kino-service wymaga do poprawnego działania kino-dao, dlatego ma do niego zależność. Budując aplikację maven buduje sobie tzn. drzewo zależności, które zawiera zależności modułów wraz z ich zależnościami rekurencyjnie wgłąb. Drzewo to można podejrzeć wpisując komendę:

Teraz już wszystko jasne. Nie ma potrzeby złączania zależnych modułów w jeden plik .jar. Wystarczy, że zależne pliki zostaną dołączone wraz z wynikową aplikacją, a dzięki drzewu zależności jest to możliwe. Pozostała jedynie mała zagadka: co się stało z jarem javax:javaee-web-api:jar:6.0 ? Jest zależność, a pliku .jar nie widać… Stało się tak dlatego, ponieważ został określony atrybut scope=provided właśnie po to, aby nie załączać tego jara do aplikacji, ponieważ będzie on dostępny na każdym serwerze aplikacyjnym i mógłby wywołać konflikt.


Kurs Maven’a [cz.01] – wstęp
Kurs Maven’a [cz.02] – od czego zacząć
Kurs Maven’a [cz.03] – do czego ten maven
Kurs Maven’a [cz.04] – zależności
Kurs Maven’a [cz.05] – instalacja
Kurs Maven’a [cz.06] – tworzenie modułu, archetyp
Kurs Maven’a [cz.07] – tworzenie modułu, kopiowanie
Kurs Maven’a [cz.08] – tworzenie modułu ręcznie
Kurs Maven’a [cz.09] – parent pom
Kurs Maven’a [cz.10] – import do Eclipsa
Kurs Maven’a [cz.11] – zależności zewnętrzne
> Kurs Maven’a [cz.12] – zależności wewnętrzne
Kurs Maven’a [cz.13] – scope, exclusion
Kurs Maven’a [cz.14] – parametry (properties)
Kurs Maven’a [cz.15] – profile
Kurs Maven’a [cz.16] – cykl życia
Kurs Maven’a [cz.17] – pluginy
Kurs Maven’a [cz.18] – repozytoria zdalne
Kurs Maven’a [cz.19] – podsumowanie