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

导读: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、三个仓库概念

本地仓库、远程仓库、中央仓库。
在这里插入图片描述

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优先被依赖引入。
在这里插入图片描述

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

2、第一声明者优先原则

掉换Maven依赖的顺序,在pom中以先声明的为准。
在这里插入图片描述

3、 排除依赖

通过exclusion标签将artifactId:spring-beans(5.2.8.RELEASE)排除:
在这里插入图片描述
此时项目中spring-beans5.2.8.依赖就会没有了。

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

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

 <properties>  
      <spring.version>5.0.5.RELEASE</spring.version> <!--版本抽取,锁定此版本-->  
  </properties>  
 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version><!--表达式获取指定版本--> 
            </dependency>   
        </dependencies>
    </dependencyManagement>
    <dependencies>
     <!--真正的引入--> 
    </dependencies>
     <build>  
 	  <!--项目构建-->
 	</build>  
 

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

猜你喜欢

转载自blog.csdn.net/weixin_47061482/article/details/129708425