2016-07-25 177 views
1

在項目我的工作,我的團隊有以下POM文件:爲什麼Maven在添加新的依賴關係時重新添加已存在的依賴關係?

<?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> 

我已經通過附加的IntelliJ提供的Maven的工具欄,從這個POM文件導致Maven依賴的截圖。 Maven Dependencies in Intellij

請注意,只有在我們嘗試添加彈簧引導JPA依賴項時,纔會出現紅色突出顯示的部分。沒有它,我們的項目工作正常。看起來Maven正在重新添加已添加的依賴項,這很奇怪,因爲Hystrix與JPA沒有任何關係。

任何人都知道如何解決這個問題?

+0

Hysterix是您項目的依賴項(在您發佈的Pom中)。你爲什麼不期望它呢? – Pace

回答

0

爲了驗證它是在那些罐子拉再次可以運行在同一個目錄下面的命令爲你的pom.xml

mvn dependency:tree -Dverbose 

這將顯示輸出JPA的依賴在哪裏出現偏差,只要搜索重複。

您可以添加排除標籤到任何可能傳遞地在這些庫拉動,如:

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

Maven 3.2.1起,您可以排除通配符傳遞依賴。

或者如果您不想使用*通配符,請明確聲明groupId和artifactId。

+0

這不起作用,它仍然會產生與問題中相同的截圖。我們試圖爲其中一個紅色下劃線的依賴項做這件事,但沒有發生任何事情。 困擾我們的事情是,Maven不應該將Hystrix依賴項導入到項目中; Hystrix不可能是JPA的傳遞依賴。 – Enis

+0

你在intellij的項目上運行重建? – UserF40

+0

是的,它無法解決依賴關係 – Enis

0

它不是一個錯誤,它是一個警告。

關於重複依賴關係的警告。

如果添加spring-boot-jpa依賴關係,則會間接添加其他spring-boot依賴關係。但是,如果嚴格添加spring-boot,則spring-boot-jpa的間接依賴關係將被忽略,並可能在不兼容的情況下解決。

請將該彈簧引導裝置僅使用spring-boot-jpa樹。