maven依赖传递及如何解决maven的jar包冲突

文章目录

  • 导读:maven相关问题
  • 一、maven依赖管理
    • 1、jar包管理:依赖管理
    • 2、三个仓库概念
    • 3、坐标的构成
  • 二、maven依赖传递和maven依赖冲突
    • 1、路径近者优先原则
    • 2、第一声明者优先原则
    • 3、 排除依赖
    • 4、版本锁定 (经常使用)

导读:maven相关问题

maven是什么?maven入门及常用命令,请参考:maven是什么?maven入门及常用命令

关于如何创建maven项目,请参考:创建maven项目

关于maven settings.xml配置,请参考:maven settings.xml配置

关于maven+tomcat 热部署 可参考:maven+tomcat 热部署

关于maven pom.xml配置,请参考:maven pom.xml配置

接下来本篇文章描述maven依赖传递及如何解决maven的jar包冲突问题。

一、maven依赖管理

1、jar包管理:依赖管理

  • 本地仓库存放很多jar,供maven使用,多个项目共用本地仓库。
  • maven通过建立本地仓库索引,可以快速找到符合要求的jar包。
  • 本地仓库的设置:conf->settings.xml中 localRepository标签中路径配置成自己本地仓库位置即可。
  • Maven管理jar包的过程,先根据坐标,从本地仓库找jar,如果找不到,配置了远程仓库,到远程仓库(私服:公司维护)找下载到本地仓库,找不到再去中央仓库(第三方团队维护:国内常用阿里云仓库镜像比较快)下,如果没有建立远程仓库,直接去中央仓库找。
  • 私服可以自行搭建和使用

2、三个仓库概念

本地仓库、远程仓库、中央仓库。
maven依赖传递及如何解决maven的jar包冲突_第1张图片

3、坐标的构成

公司、组织名(groupId)+项目名(artifactId)+版本号(version)组成。可在pom.xml中查看。

二、maven依赖传递和maven依赖冲突

在我们导入依赖时,maven会把我们导入包的直接依赖和传递依赖都导进来。两个版本就可能导致冲突。

依赖冲突版本解决方案:

1、路径近者优先原则

我们说base-project依赖B,再依赖C,引入了Tools.jar 2.0
而base-project直接依赖A,引入了Tools.jar 1.0 比B->C更近,即路径更近,所以Tools.jar 1.0优先被依赖引入。
maven依赖传递及如何解决maven的jar包冲突_第2张图片

不建议大量使用该原则,如果jar一多,需要考虑分析的路径关系就变得十分复杂。

2、第一声明者优先原则

掉换Maven依赖的顺序,在pom中以先声明的为准。
maven依赖传递及如何解决maven的jar包冲突_第3张图片

3、 排除依赖

通过exclusion标签将artifactId:spring-beans(5.2.8.RELEASE)排除:
maven依赖传递及如何解决maven的jar包冲突_第4张图片
此时项目中spring-beans5.2.8.依赖就会没有了。

4、版本锁定 (经常使用)

在pom中使用dependencyManagement标签进行版本锁定(注意dependencyManagement中只是声明使用的版本,不会导入依赖,真正的导入是和build标签或者说和dependencyManagement并列的dependencies标签。)

 <properties>  
      <spring.version>5.0.5.RELEASEspring.version>   
  properties>  
 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-beansartifactId>
                <version>${spring.version}version> 
            dependency>   
        dependencies>
    dependencyManagement>
    <dependencies>
      
    dependencies>
     <build>  
 	  
 	build>  
 

maven入门、常用命令、生命周期等可查看maven入门篇学习。

你可能感兴趣的:(maven,jar,java)