To jest przykład "wielomodułowego projektu Maven".
Składa się on z wielu projektów-modułów, pomiędzy którymi mogą istnieć zależności.

W katalogu nadrzędnym zdefiniowany jest "parent project", który:
- jest typu pom
- sam nie zawiera żadnych źródeł
- sam nie powoduje powstawania żadnych artefaktów podczas budowania
- (teoretycznie istnieje możliwość zdefiniowania tu strony z dokumentacją src/site, ale tego nie robimy)

Plik pom w parencie:
- wymienia wszystkie moduły w elemencie <modules>
- ustala podstawowe kwestie, które są wspólne dla wszystkich modułów (np. wersja Javy)
- w elementach pluginManagement i dependencyManagement może wymienić wtyczki i biblioteki po to, aby ustalić ich wersje
  ! wpisanie czegość w pluginManagement lub dependencyManagement nie znaczy jeszcze, że dana rzecz będzie używana we wszystkich modułach; trzeba się do niej jawnie odwołać
  
Plik pom w module:
- wskazuje projekt nadrzędny w elemencie <parent>
- dziedziczy z niego m.in groupId i version, których raczej się nie zmienia (wszystkie moduły mają jednakowe)
- może mieć zależności do innych modułów tego samego projektu, przy czym:
  * zabronione są zależności cykliczne
  * odwołując się do modułów typu war (robimy to w ear) [generalnie, czegoś, co nie jest typu jar] trzeba dopisać <type>war</type>
  * w <groupId> można wpisać ${project.groupId}, bo jest tkaie samo, jak nasze; analogicznie dla wersji

EAR
Specyfiką projektów "Enterprise Edition" jest format ear, który jest jeszcze poziom wyżej niż war: może zbierać wiele plików war i jar po to, aby wspólnie deployować je na serwer.
To dodatkowy moduł typu ear służy do budowania tego archiwum; wbrew intuicji nie robi się tego w parent.

Profile
Już po zajęciach wzbogacam ten projekt o profile Mavena i rozwiązuję w ten sposób niekompatybilność między WildFly 26 a późniejszymi wersjami.
W parent pom definiuję dwa profile "jakarta9" i "jakarta10". Domyślnym jest 9, a aby aktywować 10, należy uruchomić Mavena w wierszu poleceń
mvn -P jakarta10 clean package
lub w Eclipse / IntelliJ wskazać profil jakarta10 jako aktywny profil.

Najbardziej problematyczną rzeczą są identyfikatory uri dla taglibów w plikach JSP (w module sklep_web). Zamieniam je stosując kolejną Mavenową technikę: filtrowanie. 

Plik war lub ear zbudowany zgodnie z profilem jakarta9 można wgrać na serwer WildFly 26 Preview (bo te "nie preview" obsługiwały jeszcze Java EE 8).
Plik war lub ear zbudowany zgodnie z profilem jakarta10 można wgrać na serwer WildFly 27 lub wyższy (gdy to piszę: 28).

Wgrywanie z poziomu Eclipse może nie działać.
