maven打包出来的jar包引入的其他jar包版本不是pom文件配置的版本

2023-10-16 20:00:25 浏览数 (1)

        项目上使用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>

0 人点赞