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