Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Please add any missing hints to this document!

See TC’s approved Officially Supported Technologies / Sunflower document.

Help

Ask on #development Slack channel if a module doesn’t build on Java 21 and/or Spring Boot 3.4.

Jenkinsfile

In Jenkinsfile change the buildNode from java17 to java21:

Code Block
buildNode = 'jenkins-agent-java21' 

Dockerfile

In Dockerfile change the container from opendjk17 to openjdk21:

Code Block
FROM folioci/alpine-jre-openjdk21:latest

GitHub Actions

A few projects use a Java in GitHub Actions workflow, check the .github/workflows directory. Upgrade java-version from 17 to 21:

Code Block
- uses: actions/setup-java@v4
  with:
    distribution: 'temurin'
    java-version: '21'

POM Files

If declared, be sure to change the Java version and source/target compilation versions.   This can be done under the main properties block:

Code Block
<java.version>21</java.version>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>

Note: for this to work, be sure that the source/target versions are not overridden in the maven-compiler-plugin configuration.

Mockito

See https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#0.3 how to enable instrumentation of Mockito’s inline-mock-maker if it doesn’t work with Java 21.

Spring Boot

Upgrade the spring-boot-starter-parent version to the latest 3.4 version, find the version on https://github.com/spring-projects/spring-boot/tags

...

Add null argument to buildConsumerProperties() and buildProducerProperties() of KafkaProperties (example).

Migrated repositories

Some FOLIO modules and FOLIO libraries have been migrated to Spring Boot 3.4 to demonstrate that only small changes are needed:

Which flower release requires Spring Boot 3.4?

Spring Boot 3.4 is considered for Ramsons but Technical Council hasn’t decided yet.

Watch

...

Why milestone and release candidate versions?

See Spring Boot Support Policy and Spring Boot Support TimelineSome FOLIO development teams start Sunflower work before the official Spring Boot 3.4.0 version gets released:

Spring Branch

Initial Release

End of Support

Spring Boot 3.4.x

2024-11-21

2025-11-21

Spring Boot 3.3.x

2024-05-23

2025-05-23

See Ramsons Roadmap.

FOLIO Flower Release

Release

End of Support

Ramsons

2024-12

2025 Q3/Q4

Ramsons support period ends in Q3 or Q4 2025: Ramsons will be released in December 2024 and will be supported until Trillium (R2 2025) gets released in Q3 or Q4 2025 (based upon assumption that future releases will follow a similar cadence to previous releases), see FOLIO support policy.

Several institutions run a FOLIO flower release in production until the end of the FOLIO flower release support period (and even beyond).

Spring Boot 3.3.x support ends several months before the Ramsons support period. To get full support with Spring Boot security fixes Spring Boot 3.4.x is needed for Ramsons.

...

-

...

21

...

Why snapshot versions?

For spring-cloud-starter-openfeign.

...

This is low risk because Spring Cloud OpenFeign project is treated as feature-complete.

When upgrade to release versions?

It hasn’t been decided yet whether all snapshot, milestone and release candidate versions must be upgraded to a release version during bug fix period and before the official flower release.

It might be reasonable to postpone this upgrade until a security fix for Spring Boot or one of its dependencies gets publishedAfter Spring Boot 3.4.0 has been released and before the module gets released.

What is Spring Boot’s milestone and release candidate history?

v3.3.x:

...

Spring Boot has always been released on the planned date.

Difference between RC and GA

Is there a risk that the devs on the spring project change their minds and some things in the 3.4 RC don't make it into 3.4 GA?

No, RC is feature freeze.

Even if a feature from RC gets removed in GA, most FOLIO modules won’t be affected because usually they don’t use features from the latest minor version.