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.
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?
How are named releases related to sub-projects numbered releases?
Thank you for your time.
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.
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:
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-dependencies
which 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:
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 whereMINOR
is an incrementing number that starts at zero each year. TheMICRO
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 example2020.0.0-M1
and2020.0.0-RC2
. We will also stop prefixing snapshots withBUILD-
– for example2020.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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With