Escape from Jar Hell with Jigsaw Layers
Модульную систему Java aka JPMS или Jigsaw часто критикуют из-за отсутствия версионирования, которое есть в альтернативных модульных системах для Java, таких как OSGi.
Одна из главных целей версионирования - это решать проблему Jar Hell, которая возникает, когда приложение зависит от двух разных версий одной и той же библиотеки.
Хотя Jigsaw может детектировать такую конфликтную ситуацию через детектирование так называемых split пакетов, Jigsaw не позволяет загрузить две версии одного модуля, присутствующих в module path. Однако, не всегда возможно избавиться от конфликта версий в большом приложении, потому что конфликтующие версии могут появляться в приложении через транзитивные зависимости, которые не всегда под контролем разработчика. К счастью, в Jigsaw предусмотрели возможность бороться с этой проблемой с помощью так называемых слоев Jigsaw (Jigsaw Layers). В этом докладе мы разберемся, какие проблемы могли бы возникнуть, если бы в Jigsaw были явные версии для модулей, и как слои Jigsaw вместе с Jigsaw сервисами могут помочь решать проблему Jar Hell безопасно.