2016-07-25 160 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树。