Из Википедии, бесплатной энциклопедии
  (Перенаправлено из системы модулей Java )
Перейти к навигации Перейти к поиску

Система модулей платформы Java [1] определяет формат распространения для коллекций кода Java и связанных ресурсов. Он также определяет репозиторий для хранения этих коллекций или модулей и определяет, как они могут быть обнаружены, загружены и проверены на целостность. Он включает в себя такие функции, как пространства имен, с целью исправления некоторых недостатков в существующем формате JAR , особенно JAR Hell , которые могут привести к таким проблемам, как пути к классам и проблемы с загрузкой классов.

Модульная система Java изначально разрабатывалась в рамках процесса сообщества Java под названием JSR 277 и должна была быть выпущена вместе с Java 7.

Позднее реализация JSR 277 была приостановлена, и был создан Project Jigsaw [2] для модульного построения JDK. Этот JSR был заменен JSR 376 (модульная система платформы Java).

Project Jigsaw изначально предназначался для Java 7 (2011 г.), но был перенесен на Java 8 (2014 г.) как часть плана B [3] и снова перенесен на выпуск Java 9 в 2017 г. [4] Java 9, включая систему модулей Java. был выпущен 21 сентября 2017 г. [5]

Архитектура [ править ]

Система модулей Java, реализованная в Java 9, включает следующие JEP и JSR (запрос спецификации Java) : [2]

  • JEP 200: Модульный JDK: определение модульной структуры для JDK
  • JEP 201: Модульный исходный код: реорганизовать исходный код JDK в модули, улучшить систему сборки для компиляции модулей и обеспечить соблюдение границ модулей во время сборки.
  • JEP 220: Модульные образы времени выполнения: реструктуризация образов времени выполнения JDK и JRE для размещения модулей и повышения производительности, безопасности и удобства обслуживания.
  • 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 :

module com.foo.bar { требуется com.foo.baz; экспортирует com.foo.bar.alpha; экспортирует com.foo.bar.beta;}

Общественные члены com.foo.bar.alpha и com.foo.bar.beta пакетов будут доступны зависимыми модулями. Частные члены недоступны даже с помощью таких средств, как отражение , хотя, разрешен ли де-факто «незаконный доступ», зависит от настройки командной строки. [13]

В отличие от формата файла Jar, модуль будет описывать эти зависимости в объявлении модуля, которое будет помещено в файл с именем module-info.java в корне иерархии исходных файлов модуля. JDK сможет проверять зависимости и взаимодействия между модулями как во время компиляции, так и во время выполнения. Сам JDK был модульным в Java 9 . [14]

Ссылки с OSGi [ править ]

Система модулей Java не предназначена для поддержки всех функций, которые в настоящее время поддерживает платформа OSGi (например, модель жизненного цикла и реестр служб). Однако система модулей Java будет поддерживать функции, которые не поддерживаются OSGi, такие как модульность во время компиляции и встроенная поддержка собственных библиотек. [15] В 2016 году было опубликовано несколько статей, в которых изучается, как система модулей Java и OSGi могут взаимодействовать друг с другом. Их можно найти в InfoQ [16], а также в блоге OSGi Alliance. [17]

См. Также [ править ]

Ссылки [ править ]

  1. ^ "Система модулей платформы Java (JSR 376)" . Корпорация Oracle . Проверено 2 июля 2018 . CS1 maint: обескураженный параметр ( ссылка )
  2. ^ а б «Проект Пазл» . Корпорация Oracle . Проверено 29 ноября 2015 . CS1 maint: обескураженный параметр ( ссылка )
  3. ^ Марк Рейнхольд (2009-09-20). «Пришло время… План Б» . Корпорация Oracle . Проверено 21 июня 2017 . CS1 maint: обескураженный параметр ( ссылка )
  4. ^ "JDK 9" . Корпорация Oracle . Проверено 24 февраля 2016 . CS1 maint: обескураженный параметр ( ссылка )
  5. ^ «Java 9: ​​Дата выпуска и новые функции» . techworld.com. 2017-07-21 . Проверено 18 ноября 2017 . CS1 maint: обескураженный параметр ( ссылка )
  6. ^ "jlink: компоновщик Java (JSR 282)" . Корпорация Oracle . Проверено 12 марта 2016 . CS1 maint: обескураженный параметр ( ссылка )
  7. ^ "Система модулей платформы Java (JSR 376)" . Корпорация Oracle . Проверено 29 ноября 2015 . CS1 maint: обескураженный параметр ( ссылка )
  8. ^ «JEP 238: файлы JAR с несколькими выпусками» . Корпорация Oracle . Проверено 31 июля 2017 . CS1 maint: обескураженный параметр ( ссылка )
  9. ^ «JEP 253: Подготовка элементов управления пользовательского интерфейса JavaFX и API-интерфейсов CSS для модуляции» . Корпорация Oracle . Проверено 31 июля 2017 . CS1 maint: обескураженный параметр ( ссылка )
  10. ^ «JEP 260: инкапсулировать большинство внутренних API-интерфейсов» . Корпорация Oracle . Проверено 31 июля 2017 . CS1 maint: обескураженный параметр ( ссылка )
  11. ^ «JEP 275: Модульная упаковка приложений Java» . Корпорация Oracle . Проверено 31 июля 2017 . CS1 maint: обескураженный параметр ( ссылка )
  12. ^ Марк Рейнхольд (2016-03-08). «Состояние модульной системы» . Корпорация Oracle . Проверено 18 февраля 2017 . CS1 maint: обескураженный параметр ( ссылка )
  13. ^ «JEP 396: строго инкапсулируйте внутренние компоненты JDK по умолчанию» . Проверено 6 февраля 2021 .
  14. ^ "Сводка модуля JDK" . Корпорация Oracle . 2016-06-24 . Проверено 18 февраля 2017 . CS1 maint: обескураженный параметр ( ссылка )
  15. ^ Марк Рейнхольд (2012-08-24). "Project Jigsaw: Опоздание на поезд: вопросы и ответы" . Корпорация Oracle . Проверено 29 ноября 2015 . CS1 maint: обескураженный параметр ( ссылка )
  16. ^ «Java 9, OSGi и будущее модульности» . InfoQ . Проверено 26 сентября 2016 . CS1 maint: обескураженный параметр ( ссылка )
  17. ^ «Уровни модуля Java и пакеты OSGi» . OSGi Alliance . Проверено 1 августа 2016 . CS1 maint: обескураженный параметр ( ссылка )

Внешние ссылки [ править ]

  • JSR 277
  • JSR 294
  • JSR 376
  • Проект Jigsaw
  • Состояние модульной системы
  • Система модулей платформы Java: обзор проблемы