第一步在命令行中执行
mvn dependency:tree > excludeParentstart.log
如果你的settings文件不是项目使用的setting配置,那么就使用下面的命令
mvn -gs 你的路径/apache-maven-3.8.2/conf/settings-person.xml dependency:tree > excludeParentstart.log
然后打开这个输出的 excludeParentstart.log文件
然后得到了一堆密密麻麻的文件
这个玩意怎么看呢?我们得先知道依赖加载顺序
-
执行命令 mvn dependency:tree
会输出Maven项目的依赖树,展示所有的依赖项和它们之间的关系。以下是加载顺序的一些概念和说明:父级依赖(Parent
dependency):在Maven项目中,可以通过定义一个父级POM来集中管理一些通用依赖和配置,子模块POM继承了父级POM后就可以共享这些依赖和配置。因此,父级依赖会首先被加载,并且其依赖会在所有子模块之前被解析和加载。子模块依赖(Child module dependency):子模块的依赖会在其父级依赖和其他已经解析过的依赖之后被加载。
传递性依赖(Transitive
dependency):当一个依赖引入另一个依赖时,它们之间建立了一种“传递性依赖”的关系。比如,如果A依赖于B,而B依赖于C,则A会传递性地依赖于C。传递性依赖会在其直接依赖项之后被加载。冲突解决(Dependency conflict
resolution):当多个依赖项引入不同版本的同一个库时,Maven需要解决依赖冲突。Maven解决冲突的方式是使用最短路径算法,在依赖树中找到最短的路径来解析依赖,从而确定使用哪个版本的库。综上所述,这些依赖项的加载顺序是:父级依赖 → 子模块依赖 → 直接依赖项 →
传递性依赖。在加载依赖时,Maven还会进行依赖冲突解决,确保使用正确的库版本。
我们用到的也就是最短路径的话就时最高优先级。
举个例子。下面有两个连接池,druid和hikariCP。
因为druid的路径比hikariCP短。
所以使用的是druid的连接池。
但是我想指定为hikariCP的连接池怎么办呢? 我需要在引入的这个项目里,加入exclude druid
<dependency>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
当然是最外层的配置,因为最外层配置优先级最高。
如果你是在内层有多个配置,那么在内层配置多个同样的exclude
不对还是有问题
具体
https://www.cnblogs.com/dxiaodang/p/14582672.html
依赖的三个原则
1路径最短,2声明顺序优先,3子集的优先级比父级的高
springboot-start默认使用的是hikari的连接池,但是在springboot自动装配连接池的时候,有一个条件
也就是必须没有DataSource这个类型的bean
datasource是一个接口,他的实现包含druid,所以导致hikari失效。
导致nacos配置中的用户名与密码找不到文章来源:https://www.toymoban.com/news/detail-502063.html
解决方式
在pom文件中对于druid的连接池进行去除druid的依赖
com.betterwood.systemconfig
system-config-api
${system.config.api.version}
com.alibaba
druid
文章来源地址https://www.toymoban.com/news/detail-502063.html
到了这里,关于项目引入多个连接池,导致使用其他连接池,maven分析学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!