欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【原创】SpringCloud关于版本号的正确使用姿势(Hoxton)

程序员文章站 2022-05-19 14:46:55
...

SpringCloud最让新手头疼的就是它的版本号问题,一旦版本号匹配不上就会报各种奇奇怪怪的错,简直令人抓狂!!

其实SpringCloud已经非常友善了,版本管理也是相当的简单,只是新手不懂罢了。首先去官网,这里以SpringCloud的Hoxton.SR7版本来举例子,这是到2020年8月20日最新的SpringCloud版本了。

官网地址:https://spring.io/projects/spring-cloud/

SpringCloud的由于包含了一大堆组件,而且各个组件的版本号都不一样,所以SpringCloud的版本命名是通过英文单次首字母顺序决定的,这些英文单词都是伦敦地铁站的名字,目前为止是H版,也就是Hoxton(霍斯顿),前一个版本是Greenwich(格林威治)

【原创】SpringCloud关于版本号的正确使用姿势(Hoxton)

Hoxton后面的SR7代表的是第7个正式发布版

其中最令人头大的是SpringCloud对应的组件SpringBoot的版本,其实官网上写的也非常清楚了:

【原创】SpringCloud关于版本号的正确使用姿势(Hoxton)

也是说我现在的Hoxton版本是SR7,超过了SR5,SpringBoot的版本必须是2.3.x,否则就会出各种意想不到的问题,比如ClassNotFound,Unable to start embedded Tomcat等等。

那有人就要问了,我这个SpringBoot的版本号是要我一个个去找吗?我从哪里可以找到呢?这里我推荐两个网站:

https://mvnrepository.com/

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的源码就知道原因了:

【原创】SpringCloud关于版本号的正确使用姿势(Hoxton)

之后所有子项目的dependency标签都不需要写version标签了,由父项目统一管理了,除非是父项目没有的。

子项目pom截图:

【原创】SpringCloud关于版本号的正确使用姿势(Hoxton)

我看的是B站狂神的SpringCloud教程,他这一点根本没说,害我去堆<properties>标签中的内容,结果我堆了一大堆,报了一大堆莫名其妙的错,最后两个标签就完事了,浪费了我一大堆时间。

最后补充说明一下:

eureka-client、eureka-server、zuul,这几个组件的artificialId必须是带netflix的版本才能用!!!!不带netflix的只有到1.4.7.RELEASE!!!!网上一大堆教程里说的都是错的!!完全过时了,如果使用了这些不带netflix的会导致一些莫名奇妙的问题!!

【原创】SpringCloud关于版本号的正确使用姿势(Hoxton)

还有一点,zuul服务端必须是spring-cloud-starter-netflix-zuul,带有starter的,不带starter的也会报错!!