Сказ о том, как мы внедряли поддержку Java 11 в Jenkins — одном из наиболее популярных серверов автоматизации для CI/CD. Цель доклада — рассказать о том, с какими проблемами мы столкнулись в реальном крупном Maven-проекте, и о том, как мы их решали. Доклад не имеет отношения к Jenkins как таковому, целевая аудитория — разработчики, которые планируют переезд на Java 11.
Как нам удалось поддержать Java 11 и сохранить совместимость с Java 8? Как мы обеспечили сборку и тестирование проектов в Java 9..11? Насколько на нас повлияли новая система модулей, multi-release JARs и несовместимые изменения в Java (reflection, classloading, удаление компонентов Java EE/Jakarta)? И как автоматизировать тестирование, чтобы не переделывать всё с каждым новым релизом Java? И что мы, в конце концов, получили от миграции на Java 11?
Справка: Jenkins имеет огромную кодовую базу: Java, Groovy, нативные библиотеки и даже немного Kotlin. Проект включает сотни зависимостей, 1500+ плагинов, а также десятки стандартных и самописных dev-тулов (Maven, Gradle). Впридачу — 10 лет обратной совместимости и огромное количество легаси-кода. Если вы заметили сходство со своими Java-проектами и думаете о миграции на Java 11, то приходите на доклад :)