Maven Gérer les dépendances
1. Comment les bibliothèques sont interdépendantes à Maven
Maven est un excellent outil qui vous aide à explorer le monde d'open source en Java. Mais parfois, vous ne comprenez pas suffisamment de Maven afin de le contrôler. Et donc il se peut qu'il y ait une erreur inexpliquée.
Dans ce document, je vais vous donner des instructions comment éviter la duplication de la bibliothèuqe dans Maven.
Afin de simplifier des choses, vous devez voir le contenu du fichier pom.xml suivant:
pom.xml
<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>org.o7planning</groupId>
<artifactId>SimpleMavenWebApp</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SimpleMavenWebApp Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- JSTL Library -->
<!-- http://mvnrepository.com/artifact/org.glassfish.web/javax.servlet.jsp.jstl -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.servlet.jsp.jstl</artifactId>
<version>1.2.4</version>
</dependency>
</dependencies>
<build>
<finalName>SimpleMavenWebApp</finalName>
</build>
</project>
Le fichier pom.xml ci- dessus, vous avez déclaré l'utilistation de la bibliothèque javax.servlet.jsp.jstl, cette bibliothèque dépend du jstl-api. Et jstl-api dépend de deux bibliothèques servlet-api et jsp-api. La dépendance est similaire comme dans l'illustration ci-dessous:
Sur Eclipse, vous pouver voir l'arborescence de cette dépendance:
La bibliothèque qui sera utilisée est la bibliothèque que vous avez déclarée à Maven et aux bibliothèques dépendantes.
2. Exclure la bibliothèque en double
Lors de la déclaration de la bibliothèque à Maven, la duplication des bibliothèques peut se produire. Par exemple, vous déclarez l'utilisation de deux bibliothèques A et B avec Maven. A dépend de C et D, et B dépend de C et E. Cela signifie que la duplication de la bibliothèque C. Vous pouvez voir l'illustration ci-dessous.
L'illustration ci-dessus montre qu'il existe deux versions de la bibliothèque C, qui peuvent provoquer des erreurs dans l'exécution de l'application. Vous devez configurer pour supprimer une des deux versions de la bibliothèque C. Normalement, vous devez supprimer l'ancienne version.
L'utilisation de <exclusions> pour supprimer les bibliothèques dépendantes que vous ne souhaitez pas utiliser.
L'utilisation de <exclusions> pour supprimer les bibliothèques dépendantes que vous ne souhaitez pas utiliser.
<dependencies>
<dependency>
<groupId>aa</groupId>
<artifactId>A</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>bb</groupId>
<artifactId>B</artifactId>
<version>1.1</version>
<exclusions>
<exclusion>
<artifactId>C</artifactId>
<groupId>cc</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
L'outil d'Eclipse vous fournit de détecter et d'éliminer la duplication. Prennez un exemple:
pom.xml
<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>org.o7planning</groupId>
<artifactId>SimpleMavenWebApp</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SimpleMavenWebApp Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Servlet API - Servlet Library -->
<!-- http://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- JSTL Library -->
<!-- http://mvnrepository.com/artifact/org.glassfish.web/javax.servlet.jsp.jstl -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.servlet.jsp.jstl</artifactId>
<version>1.2.4</version>
</dependency>
</dependencies>
<build>
<finalName>SimpleMavenWebApp</finalName>
</build>
</project>
Cliquez avec le bouton droit sur la bibliothèque dépendante qui doit exclure, et sélectionnez Exclude Maven Artifact...
Eclipse va automatiquement ajouter le code <exclusions> dans pom.xml:
Ici, il n'y a pas de bibliothèque de duplication dans votre fichier pom.xml.
Tutoriels Maven
- Installer Maven pour Eclipse
- Le Tutoriel de Maven pour débutant
- Maven Gérer les dépendances
- Construire un projet de modules multiples avec Maven
- Exécutez l'application Web Java Maven dans Tomcat Maven Plugin
- Exécutez l'application Web Java Maven dans Jetty Maven Plugin
- Installer Tycho pour Eclipse
- Créer un projet Java OSGi avec Maven et Tycho
- Créer un projet Maven Web App vide dans Eclipse
- Intégration OSGi et AspectJ
Show More