2016-07-25 8 views
1

Im Projekt arbeite ich an, mein Team hat folgende pom-Datei:Warum fügt Maven beim Hinzufügen einer neuen Abhängigkeit bereits vorhandene Abhängigkeiten wieder hinzu?

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://maven.apache.org/POM/4.0.0" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.example</groupId> 
    <artifactId>example-project</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>example-project</name> 
    <description>example-project</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.6.RELEASE</version> 
     <relativePath/> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>com.amazonaws</groupId> 
       <artifactId>aws-java-sdk-bom</artifactId> 
       <version>1.11.13</version> 
       <type>pom</type> 
       <scope>import</scope> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>com.jayway.jsonpath</groupId> 
      <artifactId>json-path</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>com.amazonaws</groupId> 
      <artifactId>aws-java-sdk-s3</artifactId> 
      <version>1.11.13</version> 
     </dependency> 

     <dependency> 
      <groupId>com.netflix.hystrix</groupId> 
      <artifactId>hystrix-core</artifactId> 
      <version>1.5.3</version> 
     </dependency> 

     <dependency> 
      <groupId>com.netflix.hystrix</groupId> 
      <artifactId>hystrix-metrics-event-stream</artifactId> 
      <version>1.5.3</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-configuration-processor</artifactId> 
      <optional>true</optional> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 


    </dependencies> 


    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-checkstyle-plugin</artifactId> 
       <version>2.17</version> 
       <dependencies> 
        <dependency> 
         <groupId>com.puppycrawl.tools</groupId> 
         <artifactId>checkstyle</artifactId> 
         <version>7.0</version> 
        </dependency> 
       </dependencies> 
       <configuration> 
        <configLocation>google_checks.xml</configLocation> 
       </configuration> 
       <executions> 
        <execution> 
         <id>checkstyle-check</id> 
         <phase>validate</phase> 
         <configuration> 
          <configLocation> 
           http://dummy-url.com 
          </configLocation> 
          <encoding>UTF-8</encoding> 
          <consoleOutput>true</consoleOutput> 
          <includeTestSourceDirectory>true</includeTestSourceDirectory> 
          <failsOnError>true</failsOnError> 
          <failOnViolation>true</failOnViolation> 
         </configuration> 
         <goals> 
          <goal>check</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.jacoco</groupId> 
       <artifactId>jacoco-maven-plugin</artifactId> 
       <version>0.7.4.201502262128</version> 
       <executions> 
        <execution> 
         <id>default-prepare-agent</id> 
         <goals> 
          <goal>prepare-agent</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>default-report</id> 
         <goals> 
          <goal>report</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>default-check</id> 
         <goals> 
          <goal>check</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <excludes> 
         <exclude>**/Application.*</exclude> 
        </excludes> 
        <rules> 
         <rule> 
          <element>BUNDLE</element> 
          <limits> 
           <limit> 
            <counter>COMPLEXITY</counter> 
            <value>COVEREDRATIO</value> 
            <minimum>0.80</minimum> 
           </limit> 
          </limits> 
         </rule> 
        </rules> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

ich einen Screenshot der Maven Abhängigkeiten in der Maven-Symbolleiste von IntelliJ bereitgestellt angebracht habe, die aus dieser POM-Datei führt. Maven Dependencies in Intellij

Beachten Sie, dass die rot hervorgehobenen Abschnitte nur auftreten, wenn wir versuchen, die JPA-Abhängigkeit von Spring-Boot hinzuzufügen. Ohne es funktioniert unser Projekt gut. Es scheint, als ob Maven wieder Abhängigkeiten hinzufügt, die bereits hinzugefügt wurden, was seltsam ist, weil zum Beispiel Hystrix KEINE Beziehung zu JPA hat.

Wer weiß, wie diese zu lösen?

+0

Hysterix ist eine Abhängigkeit von Ihrem Projekt (ist in der Pom Sie gepostet). Warum erwartest du das nicht? – Pace

Antwort

0

Um sicherzustellen, dass es die JPA Abhängigkeit ist, die wieder in den Gläsern ziehen ist, können Sie den folgenden Befehl im selben Verzeichnis wie die pom.xml laufen

mvn dependency:tree -Dverbose 

Dieses eine Ausgabe zeigt Wo die Dependenzen herkommen, suchen Sie einfach nach den Duplikaten.

Sie können den Ausschluss-Tag hinzufügen, was auch immer transitively in diesen Bibliotheken wie das Ziehen sein kann:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-data-jpa</artifactId> 
    <exclusions> 
      <exclusion> 
       <groupId>*</groupId> 
       <artifactId>*</artifactId> 
     </exclusion> 
    </exclusions>  
</dependency> 

Von Maven 3.2.1 weiter in der Lage sind Sie transitive Abhängigkeiten ausschließen Platzhalter.

Oder wenn Sie nicht wollen, den Platzhalter * verwenden, ausdrücklich die groupId und artifactId.

+0

Das hat nicht funktioniert, es ergibt immer noch den gleichen Screenshot wie in der Frage. Wir haben das für eine der rot unterstrichenen Abhängigkeiten versucht, und nichts ist passiert. Die Sache, die uns stürzt ist, dass Maven nicht Hystrix-Abhängigkeiten in das Projekt importieren sollte; Es gibt keine Möglichkeit, dass Hystrix eine transitive Abhängigkeit von JPA ist. – Enis

+0

haben Sie in intellij neu auf dem Projekt ausgeführt? – UserF40

+0

Ja, es kann die Abhängigkeiten nicht auflösen – Enis

0

Es ist nicht wirklich ein Fehler, ist es eine Warnung.

Eine Warnung über doppelte Abhängigkeiten.

Wenn Sie die Feder-boot-JPA Abhängigkeiten hinzu fügen Sie andere Feder-Boot-Abhängigkeiten zu indirekt. Aber wenn Sie Spring-Boot streng hinzufügen, werden die indirekten Abhängigkeiten von Spring-Boot-JPA ignoriert und können in Inkompatibilitäten aufgelöst werden.

Lassen Sie diesen Spring-Boot fallen, um den Spring-Boot-JPA-Baum nur zu verwenden.

Verwandte Themen