【原创】SpringCloud关于版本号的正确使用姿势(Hoxton)
SpringCloud最让新手头疼的就是它的版本号问题,一旦版本号匹配不上就会报各种奇奇怪怪的错,简直令人抓狂!!
其实SpringCloud已经非常友善了,版本管理也是相当的简单,只是新手不懂罢了。首先去官网,这里以SpringCloud的Hoxton.SR7版本来举例子,这是到2020年8月20日最新的SpringCloud版本了。
官网地址:https://spring.io/projects/spring-cloud/
SpringCloud的由于包含了一大堆组件,而且各个组件的版本号都不一样,所以SpringCloud的版本命名是通过英文单次首字母顺序决定的,这些英文单词都是伦敦地铁站的名字,目前为止是H版,也就是Hoxton(霍斯顿),前一个版本是Greenwich(格林威治)
Hoxton后面的SR7代表的是第7个正式发布版
其中最令人头大的是SpringCloud对应的组件SpringBoot的版本,其实官网上写的也非常清楚了:
也是说我现在的Hoxton版本是SR7,超过了SR5,SpringBoot的版本必须是2.3.x,否则就会出各种意想不到的问题,比如ClassNotFound,Unable to start embedded Tomcat等等。
那有人就要问了,我这个SpringBoot的版本号是要我一个个去找吗?我从哪里可以找到呢?这里我推荐两个网站:
https://package-search.jetbrains.com/
…………谁会这么蠢去一个个找版本号呢~
SpringCloud早就为开发者准备好了版本对应清单:
在根项目的pom中引入:
<properties>
<spring-cloud.version>Hoxton.SR7</spring-cloud.version>
<spring-boot-starter-parent.version>2.3.3.RELEASE</spring-boot-starter-parent.version>
</properties>
这些是版本号信息,第一个是SpringCloud的版本号,我这里使用Hoxton.SR7。第二个是SpringBoot组件对应的版本号。当然spring-boot-starter-parent具体的版本号还是要去找的,当然只要找这一次就行了。
然后加上:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring-boot-starter-parent.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
这样就完成了通过父项目管理子项目版本号的目的了,那么所有继承这个父项目的子项目的所有版本都被自动管理,看一下spring-boot-starter-parent的源码就知道原因了:
之后所有子项目的dependency标签都不需要写version标签了,由父项目统一管理了,除非是父项目没有的。
子项目pom截图:
我看的是B站狂神的SpringCloud教程,他这一点根本没说,害我去堆<properties>标签中的内容,结果我堆了一大堆,报了一大堆莫名其妙的错,最后两个标签就完事了,浪费了我一大堆时间。
最后补充说明一下:
eureka-client、eureka-server、zuul,这几个组件的artificialId必须是带netflix的版本才能用!!!!不带netflix的只有到1.4.7.RELEASE!!!!网上一大堆教程里说的都是错的!!完全过时了,如果使用了这些不带netflix的会导致一些莫名奇妙的问题!!
还有一点,zuul服务端必须是spring-cloud-starter-netflix-zuul,带有starter的,不带starter的也会报错!!