Supporting Java 11 in real projects. Our jenkins.war story
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 affected by the new module system, multi-release JARs, and incompatible changes in Java (reflection, classloading, removal of Java EE/Jakarta components)? How to automate your testing process to not remake it entirely with every new Java release? And what did we finally get from switching to Java 11?
NB: Jenkins has a huge code base which includes multiple languages and technologies: 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 🙂