Maven Gérer les dépendances

View more Tutorials:

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.
<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​​​​​​​.

View more Tutorials: