Moduły
Projekt Maven'owy może składać się z wielu projektów. Technikę tą wykorzystujemy aby mimo separacji projektu na mniejsze części (fragmenty, komponenty, serwisy) nie musieć redefiniować konfiguracji każdej ze składowych.
Każdy z modułów posiada swój indywidualny plik pom.xml z definicją zależności, pluginów etc. oraz informację o nadrzędnym projekcie. Główny plik POM zawiera metainformacje o projekcie oraz konfiguracje dzielone między modułami (jak i ich samych definicję). Przykładowy plik POM projektu posiadającego moduły wygląda następująco:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pl.edu.ug.introductiontojee</groupId>
<artifactId>introductiontojee-examples</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>Introduction to JEE examples</name>
<modules>
<module>servlets</module>
<module>jsp</module>
<module>jpa</module>
<module>jax-rs</module>
</modules>
</project>
The Reactor
Reactor jest mechanizmem w Maven'ie odpowiedzialnym za obsługę projektów składających się z wielu modułów. Do jego zadań należy:
- zebranie informacji o wszystkich modułach do zbudowania
- posortowanie modułów w odpowiednią kolejność do budowania
- zbudowanie wszystkich modułów w kolejności
pluginManagement
Konfiguracja pluginów umieszczona w sekcji pluginManagement jest dziedziczona w każdym z modułów projektu. Każdy z modułów ma możliwość nadpisania sekcji pluginManagement. Konfiguracja ta jest przez Maven'a brana pod uwagę wyłącznie w momencie, gdy dany plugin zostanie wykorzystany wprost w module dziedziczącym.
Przykładowa deklaracja pluginu w sekcji pluginManagement:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
dependencyManagement
Zależności zdefiniowane w sekcji dependencyManagement służą jako szablon zależności (po załączeniu ich w sekcji dependencies) dla wszystkich modułów podrzędnych. Przydatne gdy chcemy żeby cały projekt korzystał z danej zależności w konkretnej wersji i była dostępna w jednakowym zasięgu.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>