Система модулей платформы Java определяет формат распространения для коллекций кода Java и связанных ресурсов. Он также определяет репозиторий для хранения этих коллекций или модулей и определяет, как они могут быть обнаружены, загружены и проверены на целостность. Он включает такие функции, как пространства имен, с целью исправления некоторых недостатков в существующем формате JAR, особенно в формате JAR Hell, что может привести к таким проблемам, как пути к классам и проблемы с загрузкой классов..
Система модулей Java изначально разрабатывалась в рамках Процесса сообщества Java как JSR 277 и должна была быть выпущена вместе с Java 7.
JSR 277 позже был включен hold, а Project Jigsaw был создан для модульного построения JDK. Этот JSR был заменен JSR 376 (Система модулей платформы Java).
Project Jigsaw изначально предназначался для Java 7 (2011 г.), но был перенесен на Java 8 (2014 г.) как часть Плана B, и снова перенесен на Выпуск Java 9 в 2017 г. Java 9, включая систему модулей Java, была выпущена 21 сентября 2017 г.
Система модулей Java, реализованная для Java 9, включает следующие JEP и JSR (запрос спецификации Java) :
Кроме того, для облегчения перехода к модульной системе было добавлено несколько других функций JDK 9:
Модули - это новый способ группировки код и данные. В отличие от файлов Jar, модули явно объявляют, от каких модулей они зависят и какие пакеты они экспортируют.
Например, следующее объявление модуля объявляет, что модуль com.foo.bar зависит от другой модуль com.foo.baz и экспортирует следующие пакеты: com.foo.bar.alpha и com.foo.bar.beta:
модуль com.foo.bar {требуется com.foo.baz; экспортирует com.foo.bar.alpha; экспортирует com.foo.bar.beta; }
В отличие от формата файла Jar, модуль будет описывать эти зависимости в объявлении модуля, которое будет помещено в файл с именем module-info.java в корне иерархии исходных файлов модуля. JDK сможет проверить их как во время компиляции, так и во время выполнения. Сам JDK будет разбит на модули для Java 9.
. Система модулей Java не намеревается поддерживать все функции, которые платформа OSGi в настоящее время поддерживает (для пример модели жизненного цикла и реестра служб). Однако система модулей Java будет поддерживать функции, которые не поддерживаются OSGi, такие как модульность во время компиляции и встроенная поддержка собственных библиотек. В 2016 году было опубликовано несколько статей, в которых изучается, как система модулей Java и OSGi могут взаимодействовать друг с другом. Их можно найти в InfoQ, а также в блоге OSGi Alliance.