codestory

Maven Abhängigkeiten verwalten

  1. Wie sind die Bibliothek im Maven abhängig voneinander?
  2. Die Überlappung der Bibliothek entwerfen

1. Wie sind die Bibliothek im Maven abhängig voneinander?

Maven ist ein nutzliches Instrument, damit Sie die Welt für die Open Source Code im Java lernen können. Aber Sie verstehen manchmals Maven nicht um es zu steuern. So erscheinen einige unerklärten Fehler
Im Dokument führe ich Sie, wie sollen wir machen, um die Duplikate der Bibliothek im Maven zu vermeiden
Sehen Sie die Inhalt von einer File pom.xml um mehr zu verstehen
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>
Auf die oben File pom.xml haben Sie die Benutzung der Bibliothek javax.servlet.jsp.jstl angemeldet. Die Bibliothek ist abhängig von jstl-api. Und jstl-api sind abhängig von 2 Bibliothek servlet-api und jsp-api. Die Abhängigkeit ist gleich wie das folgende Beispiel
Auf die Eclipse können Sie den Baum, der diese Abhängigkeit darstellt
Die benutzten Bibliotheke sind die Bibliothek, die Sie mit Maven und die abhängigen Bibliothek melden.

2. Die Überlappung der Bibliothek entwerfen

Die Anmeldung der Bibliothek in Maven kann die Duplikat der Bibliothek verursachen. Zum Beispiel Sie melden die Benutzung der Bibliothek A und B mit Maven. A ist abhängig von C und D. B ist abhängig von C und E. Dann C ist eine Wiederholung. Sie können das unten Beispiel sehen.
Das Beispiel zeigt, dass 2 Version der Bibliothek C benutzt werden. Das kann den Fehler bei der Operation der Applikation verursachen. Sie sollen konfigurieren um eine der 2 Version von der Bibliothek C zu löschen. Normalerweise löschen Sie die alte Version.

Benutzen Sie <exclusions> um die abhängigen Bibliothek, die Sie nicht benutzen möchten, zu löschen
<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>
Das Instrument von Eclipse unterstützt Sie bei der Entdeckung der Wiederholung und dem Löschen der Wiederholung. Sehen Sie ein Beispiel
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>
Klicken Sie die Rechtmaustaste in die Bibliothek, die gelöscht werden soll, wählen Sie dann Exclude Maven Artifact...
Eclipse wird die Code <exclusions> in die File pom.xml automatisch ergänzen
Jetzt hat Ihre File pom.xml keine Wiederholung der Bibliothek: