项目上使用flyway来管理数据库版本,但是遇到了一件奇怪的事,这件事发生的时间点是springboot从2.3.12升级到2.6.7版本,升级后到底发生了什么,到底是谁引入了flyway 8.0.5版本呢,博主在pom中显示引入的flyway版本为7.1.1,在这个公共jar包里面执行mvn dependency:tree看到的flyway版本也是7.1.1,为什么这个公共jar包被其他项目引入后执行mvn dependency:tree却显示 flyway的版本为8.0.5,而且显示也是由这个公共jar包引入的。
刚开始没去想springboot版本升级的问题,后来找到问题后再去看确实就是springboot版本升级导致的,因为笔者在dependencymanagement中引入了spring-boot-dependencies这个依赖,下面贴出这种依赖做了些啥,这里只贴出跟flyway关联部分:
代码语言:javascript复制
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>${flyway.version}</version> --此处flyway.version为8.0.5
</dependency>
</dependencies>
</dependencyManagement>
由于dependencyManagement指定的maven插件版本优先级要高,而且在不使用里面的maven插件时用mvn dependency:tree根本扫描不出来,好了,找到问题根源了,下面给出解决方案:
这个是基于maven dependencyManagement指定的版本优先级要高于dependencies中的版本,在spring-boot-dependencies前面增加flyway的依赖版本
代码语言:javascript复制
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>7.1.1</version>
</dependency>
<!-- spring-boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.13</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>