是否存在 Spring-boot 和 Spring-cloud 的兼容性矩阵?

我想知道 Springboot 和 Springcloud 之间是否存在兼容性矩阵?

我创建了一个关于 STS 的简单项目,并遇到了兼容性问题。

   <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>




<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

了解一下 Springboot 和 Springcloud 支持的版本会让事情变得更简单。

我确实观察到一个公开的问题,谈论这种需求-https://github.com/spring-cloud/spring-cloud-build/issues/43

当他们开始一个 SpringCloud 项目时,社区是否有一种方法来选择如何开始一个特定的版本组合?

编辑: 添加我从昨天开始遇到的这类问题的另一个实例

来自 pom.xml 的片段

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<!--<version>1.5.2.RELEASE</version> -->
<relativePath /> <!-- lookup parent from repository -->
</parent>




<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<!-- <version>Camden.SR6</version -->
<!-- <version>Brixton.SR5</version> -->
<!--  <version>Camden.SR6</version> -->
<version>Camden.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

在 Camden.SR5中使用1.5.2. RELEASE 不会出现 maven 错误,但是当应用程序启动时会抛出 NoClassDefFoundError。

2017-03-28 09:51:15.148 ERROR 15808 --- [           main] o.s.boot.SpringApplication               : Application startup failed


java.lang.NoClassDefFoundError: org/springframework/cloud/context/named/NamedContextFactory$Specification
at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_112]
at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_112]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_112]
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0_112]
at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_112]
at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_112]
at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_112]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_112]
at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_112]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_112]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_112]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_112]
at org.springframework.cloud.netflix.feign.FeignClientsRegistrar.registerClientConfiguration(FeignClientsRegistrar.java:367) ~[spring-cloud-netflix-core-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.cloud.netflix.feign.FeignClientsRegistrar.registerDefaultConfiguration(FeignClientsRegistrar.java:104) ~[spring-cloud-netflix-core-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.cloud.netflix.feign.FeignClientsRegistrar.registerBeanDefinitions(FeignClientsRegistrar.java:87) ~[spring-cloud-netflix-core-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:352) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:143) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:116) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:320) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:228) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:270) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:93) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:686) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:524) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at com.forecastessentials.school.SchoolUniformForecastApplication.main(SchoolUniformForecastApplication.java:12) [classes/:na]
Caused by: java.lang.ClassNotFoundException: org.springframework.cloud.context.named.NamedContextFactory$Specification
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_112]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_112]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_112]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_112]
... 31 common frames omitted

与 Brixton.SR6一起使用1.4.5对我来说是一个很好的组合。

93864 次浏览

Here is the release train Spring Boot compatibility table. Below the table, there is a note that the Camden release train builds on Spring Boot 1.4.x, but is also tested with 1.5.x.

You can also read the release notes for each release which notes compatible component versions:

Spring Cloud Camden builds on Spring Boot 1.4.x.

But later:

Adds Boot 1.5 compatibility and breaks Boot 1.3 compatibility

Yes there is: http://start.spring.io/actuator/info

It includes more libraries than just spring-cloud, but not every single one of them.

Updated in July 2022

Spring Cloud release train Spring Boot compatibility

Compatibility Matrix
Spring Cloud Spring Boot
2021.0.3+ aka Jubilee 2.6.x, 2.7.x
2021.0.x aka Jubilee 2.6.x
2020.0.3+ aka Ilford 2.4.x, 2.5.x
2020.0.x aka Ilford 2.4.x
⚠ Below Spring Cloud versions have all reached end of life status and are no longer supported.
Spring Cloud Spring Boot
Hoxton.SR5+ 2.2.x, 2.3.x
Hoxton 2.2.x
Greenwich 2.1.x
Finchley 2.0.x
Edgware 1.5.x
Dalston 1.5.x
Camden.SR5+ 1.4.x, 1.5.x
Camden 1.4.x
Brixton 1.3.x, 1.4.x
Angel 1.2.x
⚠ Below are milestones of Spring Cloud (preview).
Spring Cloud Spring Boot
2022.0.0-M4 3.0.0-M4
2022.0.0-M3 3.0.0-M3
2022.0.0-M2 3.0.0-M2
2022.0.0-M1 3.0.0-M1
2021.0.0-M2 2.6.0-M3

Sources:

  1. Spring Cloud project page
  2. Spring Cloud 2021.0.0-M2 (codename Jubilee) is Available
  3. Spring Cloud 2021.0.0 (codename Jubilee) Has Been Released
  4. Spring Cloud Roadmap and EOL Announcements
  5. 2022.0.0-M1 PRE reference doc
  6. Spring Cloud 2022.0.0-M2 (codename Kilburn) Has Been Released
  7. Spring Cloud 2022.0.0-M3 (codename Kilburn) Has Been Released

2022 and it still is tedious to find the latest matching versions of Spring Boot and Spring Cloud... Here a procedure:

  1. Look up the compatibility matrix in https://spring.io/projects/spring-cloud the Release Trains table, it shows which Spring Boot and Spring Cloud Release Train versions match. Release Trains as of 2022-12-06:

    Screenshot of Spring Release Trains as of 2022-12-06

  2. Klick on the link in the "Release Train" column (screenshot: on the left side) to reach the Spring Cloud release notes, where the latest "Release Train" versions are mentioned.
    E.g.: "Hoxton ==> Hoxton.SR12".

    Alternatively:
    find the latest matching Spring Cloud Release Train version in https://github.com/spring-cloud/spring-cloud-release/tags.

  3. Pick the value from the "Boot Version" column and look up the highest matching version in the Spring Boot releases, here: https://github.com/spring-projects/spring-boot/releases or (faster) here: https://github.com/spring-projects/spring-boot/tags.
    Example continued: "==> v2.3.12.RELEASE".

Another info source is the Spring Blog category "releases": https://spring.io/blog/category/releases, but imho that is a bit ... confusing.

I found a way to get the exact version compatibility between spring boot and spring cloud.

Just visit this URL: https://start.spring.io/actuator/info

spring-cloud": {
"Hoxton.SR12": "Spring Boot >=2.2.0.RELEASE and <2.4.0.M1",
"2020.0.5": "Spring Boot >=2.4.0.M1 and <2.6.0-M1",
"2021.0.0-M1": "Spring Boot >=2.6.0-M1 and <2.6.0-M3",
"2021.0.0-M3": "Spring Boot >=2.6.0-M3 and <2.6.0-RC1",
"2021.0.0-RC1": "Spring Boot >=2.6.0-RC1 and <2.6.1",
"2021.0.1": "Spring Boot >=2.6.1 and <2.6.5-SNAPSHOT",
"2021.0.2-SNAPSHOT": "Spring Boot >=2.6.5-SNAPSHOT and <3.0.0-M1",
"2022.0.0-M1": "Spring Boot >=3.0.0-M1 and <3.1.0-M1"
},