This is the story about how we were implementing Java support in Jenkins — one of the most popular automation servers for CI/CD. This talk's purpose is to show what problems we encountered in big real-life Maven project and how we solved them. This talk doesn't concern Jenkins in and of itself, rather it's aimed at developers planning to switch to Java 11.
How did we manage to support Java 11 and keep compatibility with Java 8? How did we enable project building and testing in Java 9..11? How were we influenced by the new module system, multi-release JARs, and incompatible changes in Java (reflection, classloading, deleting of Java EE/Jakarta components)? How you should automate your testing process to not remake it entirely with every new Java release? And what did we get at the end of the day by switching to Java 11?
NB: Jenkins has a very big code base: Java, Groovy, native libraries, even a bit of Kotlin. The project includes hundreds of dependencies, 1500+ plugins, and dozens of standard and custom developer tools (Maven, Gradle). Add to this 10 years of backward compatibility and an enormous amount of legacy code. If you noticed some resemblance to your own Java projects and thinking about switching to Java 11, come and listen to the talk :)