- Optimize build can be run with JDK 11
- any missing classes from jigsawed modules are added as maven dependencies
- source and target level remain on minimum version 1.8
In the default Jenkins pipeline we build Optimize with the minimum supported Java runtime (1.8).
However as we want to ensure that Optimize is also compatible with newer version we need a nightly pipeline that runs the Optimize Build + the IT tests using a newer JDK.
This way we ensure:
- Optimize doesn't have any missing dependencies to run on newer JDK's (removed/deprecated modules due to Jigsaw)
- Optimize compiles using those JDK's producing 1.8 class files (target and source level on 1.8)
The pro's for this approach are:
- no further modifications or new IT implementations needed
- compiling & running the optimize sources with newer JDK's will catch all of the potential issues due a Java upgrade (missing modules due jigsaw, removed unsafe API)
- we run the whitebox integration tests as usual
The limitation of that approach is that we don't test class files compiled with JDK8 but run on a newer JDK, for this to do we would need to built with JDK8 and then run Optimize using a newer JDK to then execute black box integration tests on it. As we don't have these black box integration tests, it's not a low hanging fruit.
Considering that Java itself guarantees binary upwards compatibility and given we can successfully build and run the same sources with newer JDK's ensured by this pipeline we can with a low risk assume the class files produces by a 1.8 compiler work on a new runtime as well.