30

Spring folks do a great job of releasing lots of quality projects. One of them we have been using is Spring Cloud and its various sub-projects.

One aspect that is really confusing to me is Spring Cloud version names. For ex., if you goto Spring Cloud it reads Camden or Angel or Brixton. Then if you goto specific project site, for ex., Spring Cloud Config it shows versions like 1.3.0 or 1.2.3

Two questions about these.

  1. From named versions (Camden, Brixton, Angel) it is hard to visualize which is the latest and its sequence. Is there a place it is well documented?

  2. How are named releases related to sub-projects numbered releases?

Thank you for your time.

t0r0X
  • 4,212
  • 1
  • 38
  • 34
singularity
  • 1,057
  • 2
  • 10
  • 20

4 Answers4

20

After posting the question, found some information about these versions in main page. This surely clears things up.

Spring Cloud is an umbrella project consisting of independent projects with, in principle, different release cadences. To manage the portfolio a BOM (Bill of Materials) is published with a curated set of dependencies on the individual project (see below). The release trains have names, not versions, to avoid confusion with the sub-projects. The names are an alphabetic sequence (so you can sort them chronologically) with names of London Tube stations ("Angel" is the first release, "Brixton" is the second). When point releases of the individual projects accumulate to a critical mass, or if there is a critical bug in one of them that needs to be available to everyone, the release train will push out "service releases" with names ending ".SRX", where "X" is a number.

singularity
  • 1,057
  • 2
  • 10
  • 20
  • 1
    You can also see the versions for the sub projects here http://projects.spring.io/spring-cloud/#release-trains – Ryan Baxter Feb 09 '17 at 16:55
  • The release notes are documented here for each named RELEASE or "Service Release SRX" -- https://github.com/spring-projects/spring-cloud/wiki/Spring-Cloud-Finchley-Release-Notes -- https://github.com/spring-projects/spring-cloud/wiki/Spring-Cloud-Greenwich-Release-Notes – CoderTR Apr 18 '19 at 16:23
6
  • What is Spring Cloud?

Spring Cloud is an umbrella project consisting of independent projects with, in principle, different release cadences. To manage the portfolio a BOM (Bill of Materials) is published with a curated set of dependencies on the individual project (see below). The release trains have names, not versions, to avoid confusion with the sub-projects. The names are an alphabetic sequence (so you can sort them chronologically) with names of London Tube stations ("Angel" is the first release, "Brixton" is the second). When point releases of the individual projects accumulate to a critical mass, or if there is a critical bug in one of them that needs to be available to everyone, the release train will push out "service releases" with names ending ".SRX", where "X" is a number.

  • Often we have an already existing project based on Spring Boot, and we like to add one or more dependencies to it that come from the Spring Cloud project, then we are confronted with the problem which of that particular spring cloud project should I use that's compatible with my current version of Spring Boot?

    The release trains comatiblity with spring boot version is published on spring cloud's home page, here they are at the time of writing this:

    enter image description here

    Also the release notes of each release train might contain the different compatible releases of the individual sub-projects. Also here you can find their GH pages for a given release train and more info about the sub-projects it uses.

    Now to more accurately pin down the exact version of the particular sub-project that you are interested in, e.g. spring-cloud-starter-openfeign, one need to know that this umbrella project is nothing more than:

    • a main pom file spring-cloud-dependencies-parent which:

    • a child pom of a particular spring-boot-starter-parent, which can tell you what version of spring boot a given release train uses.

    • it also imports spring-cloud-dependencieswhich declares all the versions of the individual sub-projects that our release train is using, e.g. for Hoxton.SR3:

    <properties>
        <spring-cloud-kubernetes.version>1.1.2.RELEASE</spring-cloud-kubernetes.version>
        <spring-cloud-security.version>2.2.1.RELEASE</spring-cloud-security.version>
        <spring-cloud-config.version>2.2.2.RELEASE</spring-cloud-config.version>
        <spring-cloud-contract.version>2.2.2.RELEASE</spring-cloud-contract.version>
        <spring-cloud-netflix.version>2.2.2.RELEASE</spring-cloud-netflix.version>
        <spring-cloud-vault.version>2.2.2.RELEASE</spring-cloud-vault.version>
        <spring-cloud-openfeign.version>2.2.2.RELEASE</spring-cloud-openfeign.version>
        <spring-cloud-task.version>2.2.3.RELEASE</spring-cloud-task.version>
        <spring-cloud-stream.version>Horsham.SR3</spring-cloud-stream.version>
        <spring-cloud-commons.version>2.2.2.RELEASE</spring-cloud-commons.version>
        <spring-cloud-build.version>2.2.3.RELEASE</spring-cloud-build.version>
        <spring-cloud-zookeeper.version>2.2.1.RELEASE</spring-cloud-zookeeper.version>
        <spring-cloud-consul.version>2.2.2.RELEASE</spring-cloud-consul.version>
        <spring-cloud-bus.version>2.2.1.RELEASE</spring-cloud-bus.version>
        <spring-cloud-function.version>3.0.3.RELEASE</spring-cloud-function.version>
        <spring-cloud-sleuth.version>2.2.2.RELEASE</spring-cloud-sleuth.version>
        <spring-cloud-gateway.version>2.2.2.RELEASE</spring-cloud-gateway.version>
        <spring-cloud-gcp.version>1.2.2.RELEASE</spring-cloud-gcp.version>
        <spring-cloud-cloudfoundry.version>2.2.1.RELEASE</spring-cloud-cloudfoundry.version>
        <main.basedir>${basedir}/../..</main.basedir>
        <spring-cloud-circuitbreaker.version>1.0.2.RELEASE</spring-cloud-circuitbreaker.version>
        <spring-cloud-aws.version>2.2.1.RELEASE</spring-cloud-aws.version>
        <spring-cloud-cli.version>2.2.1.RELEASE</spring-cloud-cli.version>
    </properties>
    

    this tells me as an example, that I could use the 2.2.2.RELEASE version of open feign since my project's spring boot version is 2.2.5

    These pom files are all available for one to dig in if required on maven central:

HackerMonkey
  • 443
  • 3
  • 13
1

The Spring Cloud release naming has changed. Internally, they still use London Tube Station names but what is published to maven repositories follows Calendar Versioning. Explanation follows...

Notable Changes in the 2020 Release Train

We have changed our release train versioning scheme. We now follow Calendar Versioning or calver for short. We will follow the YYYY.MINOR.MICRO scheme where MINOR is an incrementing number that starts at zero each year. The MICRO segment corresponds to suffixes previously used: .0 is analogous to .RELEASE and .2 is analogous to .SR2. Pre-release suffixes will also change from using a . to a - for the separator, for example 2020.0.0-M1 and 2020.0.0-RC2. We will also stop prefixing snapshots with BUILD- – for example 2020.0.0-SNAPSHOT.

We will continue to use London Tube Station names for code names. The current codename is Ilford. These names will no longer be used in versions published to maven repositories.

Reference: https://spring.io/blog/2020/04/17/spring-cloud-2020-0-0-m1-released#notable-changes-in-the-2020-release-train

Compatibility Matrix with Spring Boot versions: https://spring.io/projects/spring-cloud#adding-spring-cloud-to-an-existing-spring-boot-application

sdoxsee
  • 4,451
  • 1
  • 25
  • 60
0

2021 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 2021-12-14:

    Screenshot of Spring Release Trains as of 2021-12-14
  2. Klick on the link in the "Release Train" column 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.

t0r0X
  • 4,212
  • 1
  • 38
  • 34