Dependency Management ist ein zentrales Merkmal von Apache Maven. Es ermöglicht die Verwaltung und Auflösung von Projektabhängigkeiten und vereinfacht den Build-Prozess. Außerdem trägt es zur Konsistenz zwischen verschiedenen Projekten bei.
Abhängigkeiten in Maven sind externe Bibliotheken oder Module, die
ein Projekt zum Kompilieren und Ausführen benötigt. Sie werden in der
pom.xml definiert und automatisch aus Remote-Repositories
geladen.
Der grundlegende Tag zur Definition einer Abhängigkeit ist
<dependency>, der innerhalb des
<dependencies> Blocks in der pom.xml
steht:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.16</version>
</dependency>
</dependencies>Maven nutzt Scopes, um festzulegen, in welchen Phasen eine Abhängigkeit bereitsteht. Es gibt sechs Haupt-Scopes.
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
<scope>compile</scope>
</dependency><dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency><dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
<scope>runtime</scope>
</dependency><dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency><dependency>
<groupId>com.example</groupId>
<artifactId>custom-lib</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/custom-lib-1.0.0.jar</systemPath>
</dependency><dependency>
<groupId>com.example</groupId>
<artifactId>example-bom</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>Maven löst Abhängigkeiten rekursiv auf. Wenn Projekt A von B abhängt und B wiederum von C, wird C auch als Abhängigkeit von A betrachtet.
Zur Visualisierung kann der folgende Befehl verwendet werden:
mvn dependency:tree
Über den Abschnitt <dependencyManagement> können
Versionen und Scopes von Abhängigkeiten für Unterprojekte festgelegt
werden. Diese Abhängigkeiten werden dann in den Unterprojekten ohne
Version angegeben.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.16</version>
</dependency>
</dependencies>
</dependencyManagement>Im Unterprojekt:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
</dependencies>Um bestimmte transitive Abhängigkeiten auszuschließen, kann der
<exclusions> Tag eingesetzt werden:
<dependency>
<groupId>com.example</groupId>
<artifactId>example-app</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>org.unwanted</groupId>
<artifactId>unwanted-lib</artifactId>
</exclusion>
</exclusions>
</dependency>Ein tiefes Verständnis des Dependency Managements in Maven ermöglicht es, die Komplexität großer Projekte zu beherrschen. Scopes, transitive Abhängigkeiten und ein zentral verwaltetes System machen es einfacher, alle Bibliotheken konsistent und wartbar zu halten.