Maven传递依赖冲突的解决

 一:Maven依赖传递

    假如有Maven项目A,项目B依赖A,项目C依赖B。那么我们可以说 C依赖A。也就是说,依赖的关系为:C—>B—>A。

    那么我们执行项目C时,会自动把B、A都下载导入到C项目的jar包文件夹中。

    这就是依赖的传递性。


二:依赖传递的排除

传递依赖冲突时,可以在不需要的jar的传递依赖中声明排除,从而解决冲突。 
例子:

<dependency>
        <groupId>org.apache.strutsgroupId>
        <artifactId>struts2-spring-pluginartifactId>
        <version>2.3.24version>
        <exclusions>
          <exclusion>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-beansartifactId>
          exclusion>
        exclusions>
    dependency>

三:依赖冲突与解决

1、第一声明优先原则: 
在pom.xml配置文件中,如果有两个名称相同版本不同的依赖声明,那么先写的会生效。 

所以,先声明自己要用的版本的jar包即可。 

         A—>E—>X(version 0.0.1)

         A—>F—>X(version 0.0.2)

         则在项目A的中,E、F那个在先则A依赖哪条路径的X。


2、路径近者优先: 

直接依赖优先于传递依赖,如果传递依赖的jar包版本冲突了,那么可以自己声明一个指定版本的依赖jar,即可解决冲突。

         A—>B—>C—>D—>E—>X(version 0.0.1)

         A—>F—>X(version 0.0.2)

         则A依赖于X(version 0.0.2)。


3、版本锁定原则(最常使用) 
在配置文件pom.xml中先声明要使用哪个版本的相应jar包,声明后其他版本的jar包一律不依赖。解决了依赖冲突。 
例子:

<properties>
        <spring.version>4.2.4.RELEASEspring.version>
        <hibernate.version>5.0.7.Finalhibernate.version>
        <struts.version>2.3.24struts.version>
    properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-contextartifactId>
                <version>${spring.version}version>
            dependency>
dependencies>
dependencyManagement

你可能感兴趣的:(Maven)