故事背景
有个springboot工程引入一个子工程,子工程中有一个jar包
但结果每次引入的时候该jar的版本却一直是6.1.0.jre7
在StackOverFlow上面看一个回答,可能是引用的其他工程中也包含有这个依赖,然后被那个依赖覆盖了。
最后发现是springboot的锅。
其实在Spring Boot 项目下的pom.xml文件中通常都会有一个标签,用来指定继承的父pom
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version> <relativePath/>
</parent>
然后点击发现spring-boot-starter-parent也继承自一个pom
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
再点击这个dependencies, 如下
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.2.RELEASE</version>
<packaging>pom</packaging>
<name>Spring Boot Dependencies</name>
<description>Spring Boot Dependencies</description>
<url>http://projects.spring.io/spring-boot/</url>
<organization>
<name>Pivotal Software, Inc.</name>
<url>http://www.spring.io</url>
</organization>
很多行...
<properties>
<!-- Dependency versions -->
<activemq.version>5.14.3</activemq.version>
<antlr2.version>2.7.7</antlr2.version>
<appengine-sdk.version>1.9.49</appengine-sdk.version>
<artemis.version>1.5.3</artemis.version>
<aspectj.version>1.8.9</aspectj.version>
<assertj.version>2.6.0</assertj.version>
...
<mssql-jdbc.version>6.1.0.jre7</mssql-jdbc.version>
...
看到罪魁祸首的那一行了吗?
要想让我们的version生效,需要在引用方强制让我们想要的版本号生效。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<properties>
... 其他内容
<mssql-jdbc.version>6.2.0.jre8</mssql-jdbc.version>
</properties>
即可
其他方式参考如下博客