Модульная система платформы Java - Java Platform Module System
В Модульная система платформы Java[1] определяет формат распространения для коллекций Ява код и связанные ресурсы. Он также определяет репозиторий для хранения этих коллекций или модули, и определяет, как их можно обнаружить, загрузить и проверить на целостность. Он включает такие функции, как пространства имен, с целью исправления некоторых недостатков в существующих БАНКА формат, особенно JAR Ад, что может привести к таким проблемам, как пути к классам и проблемы с загрузкой классов.
Система модулей Java изначально разрабатывалась в рамках Процесс сообщества Java как JSR 277 и планировалось выпустить вместе с Java 7.
JSR 277 позже был приостановлен, и Project Jigsaw[2] был создан для модульного построения JDK. Этот JSR был заменен JSR 376 (Система модулей платформы Java).
Project Jigsaw изначально предназначался для Java 7 (2011), но было отложено до Java 8 (2014) как часть Плана Б,[3] и снова отложил Java 9 выпуск в 2017 году.[4] Java 9, включая Java Module System, была выпущена 21 сентября 2017 г.[5]
Архитектура
Система модулей Java, реализованная для Java 9, включает следующие JEP и JSR (запрос спецификации Java):[2]
- JEP 200: Модульный JDK: Определите модульную структуру для JDK
- JEP 201: Модульный исходный код: реорганизовать исходный код JDK в модули, улучшить систему сборки для компиляции модулей и обеспечить соблюдение границ модуля во время сборки
- JEP 220: Модульные образы времени выполнения: реструктуризация образов времени выполнения JDK и JRE для размещения модулей и повышения производительности, безопасности и удобства обслуживания.
- JEP 260: инкапсулировать большинство внутренних API
- JEP 261: Модульная система: реализация модульной системы платформы Java
- JEP 282: Java Linker: создание инструмента, который может собирать и оптимизировать набор модулей и их зависимости в настраиваемый образ времени выполнения.[6]
- JSR 376: Модульная система платформы Java[7]
Кроме того, было добавлено несколько других функций JDK 9 для облегчения перехода к модульной системе:
- JEP 238: файлы JAR с несколькими выпусками: расширение формата файла JAR, чтобы несколько версий файлов классов для конкретных версий Java могли сосуществовать в одном архиве.[8]
- JEP 253: Подготовка JavaFX Элементы управления пользовательского интерфейса и API-интерфейсы CSS для модуляризации: определите общедоступные API-интерфейсы для функций JavaFX, которые в настоящее время доступны только через внутренние API-интерфейсы и станут недоступными из-за модульности.[9]
- JEP 260: инкапсулировать большинство внутренних API-интерфейсов: сделать большинство внутренних API-интерфейсов JDK недоступными по умолчанию, но оставить доступными несколько важных, широко используемых внутренних API-интерфейсов до тех пор, пока не появятся поддерживаемые замены для всех или большей части их функций.[10]
- JEP 275: Модульная упаковка приложений Java: Упаковщик Java будет развиваться для JDK 9, делая его осведомленным о модулях, позволяя, например, упаковать модуль и все модули, от которых он зависит.[11]
Модули - это новый способ группировки кода и данных. Вопреки Файлы JAR, модули явно объявляют, от каких модулей они зависят и какие пакеты экспортируют.[12]
Например, следующее объявление модуля заявляет, что модуль 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.[13]
Связи с OSGi
Система модулей Java не предназначена для поддержки всех функций, которые OSGi платформа в настоящее время поддерживает (например, модель жизненного цикла и реестр служб). Однако система модулей Java будет поддерживать функции, которые не поддерживаются OSGi, такие как модульность во время компиляции и встроенная поддержка собственных библиотек.[14] В 2016 году было опубликовано несколько статей, в которых изучается, как система модулей Java и OSGi могут взаимодействовать друг с другом. Их можно найти на InfoQ.[15] а также блог OSGi Alliance.[16]
Смотрите также
Рекомендации
- ^ "Система модулей платформы Java (JSR 376)". Корпорация Oracle. Получено 2018-07-02.
- ^ а б "Проект Пазл". Корпорация Oracle. Получено 2015-11-29.
- ^ Марк Рейнхольд (2009-09-20). «Пришло время… План Б». Корпорация Oracle. Получено 2017-06-21.
- ^ «JDK 9». Корпорация Oracle. Получено 2016-02-24.
- ^ «Java 9: дата выпуска и новые функции». techworld.com. 2017-07-21. Получено 2017-11-18.
- ^ "jlink: компоновщик Java (JSR 282)". Корпорация Oracle. Получено 2016-03-12.
- ^ "Система модулей платформы Java (JSR 376)". Корпорация Oracle. Получено 2015-11-29.
- ^ «JEP 238: файлы JAR с несколькими выпусками». Корпорация Oracle. Получено 2017-07-31.
- ^ «JEP 253: подготовка элементов управления пользовательским интерфейсом JavaFX и API-интерфейсов CSS для модуляции». Корпорация Oracle. Получено 2017-07-31.
- ^ «JEP 260: инкапсулировать большинство внутренних API». Корпорация Oracle. Получено 2017-07-31.
- ^ «JEP 275: Модульная упаковка приложений Java». Корпорация Oracle. Получено 2017-07-31.
- ^ Марк Рейнхольд (2016-03-08). «Состояние модульной системы». Корпорация Oracle. Получено 2017-02-18.
- ^ "Резюме модуля JDK". Корпорация Oracle. 2016-06-24. Получено 2017-02-18.
- ^ Марк Рейнхольд (2012-08-24). "Project Jigsaw: Опоздание на поезд: вопросы и ответы". Корпорация Oracle. Получено 2015-11-29.
- ^ «Java 9, OSGi и будущее модульности». InfoQ. Получено 2016-09-26.
- ^ «Уровни модуля Java и пакеты OSGi». OSGi Alliance. Получено 2016-08-01.