Модули Java 9 – одно из самых значительных изменений в структуре Java. Здесь я предоставлю краткое введение в “Систему модулей Java 9”.
Модули Java 9
Мы рассмотрим следующие темы о системе модулей Java 9.
- Введение
- Java SE 9: Проект Jigsaw
- Проблемы текущей системы Java?
- Преимущества системы модулей Java SE 9
- Сравнение JDK 8 и JDK 9
- Что такое модуль Java 9?
- Мать системы модулей Java 9
- Сравнение приложений Java 8 и Java 9
Введение
Корпорация Oracle отложила выпуск Java 9 с марта 2017 года на сентябрь 2017 года. Как известно, Java SE 8 появилась с тремя большими новыми функциями (плюс несколько улучшений и новых возможностей).
- Лямбда-выражения
- API потоков
- API дат
Аналогично, Java SE 9 появляется с тремя основными функциями (плюс несколько улучшений и новых возможностей):
- Система модулей Java (проект Jigsaw)
- Java REPL
- Milling Project Coin
В этом сообщении мы обсудим основы проекта Oracle Jigsaw.
Java SE 9: Проект Jigsaw
Проект Jigsaw собирается представить совершенно новую концепцию Java SE 9: Система модулей Java. Это очень крупный и престижный проект от корпорации Oracle в релизе Java SE 9. Изначально он был запущен как часть релиза Java SE 7. Однако с огромными изменениями его отложили до Java SE 8, а затем снова отложили. Теперь он собирается выпуститься вместе с Java SE 9 в сентябре 2017 года. Основные цели проекта Jigsaw:
- Модульная JDK
Как мы знаем, текущая система JDK слишком велика. Поэтому они решили разделить JDK на небольшие модули, чтобы получить ряд преимуществ (мы обсудим их в ближайших разделах). – Модульный исходный код
Текущие файлы исходного кода jar слишком велики, особенно rt.jar. Поэтому они собираются разделить исходный код Java на более мелкие модули. – Модульные образы времени выполнения
Основная цель этой функции – “Перестроить образы времени выполнения JDK и JRE для размещения модулей”. – Инкапсулировать большинство внутренних API
Основная цель этой функции – “Сделать большинство внутренних API JDK недоступными по умолчанию, но оставить доступными некоторые критически важные, широко используемые внутренние API”. – Система модулей платформы Java
Основная цель этой функции – “Позволить пользователю создавать свои модули для разработки своих приложений”. – jlink: Java Linker
Основная цель этого инструмента jlink – “Позволить пользователю создавать исполняемые файлы для своих приложений”.
Если вы не совсем понимаете эти вещи, не беспокойтесь. Мы обсудим эти концепции подробно с полезными примерами в ближайших разделах, а также в моих будущих сообщениях.
Проблемы текущей системы Java?
В этом разделе мы обсудим “Почему нам нужна система модулей Java SE 9”, то есть проблемы текущей системы Java. У Java SE 8 или более ранних систем есть следующие проблемы при разработке или доставке приложений на основе Java.
- Поскольку JDK слишком большой, его сложно масштабировать для небольших устройств. Java SE 8 представила 3 типа компактных профилей (compact1, compact2 и compact3), чтобы решить эту проблему, но это не решает данную проблему.
- Файлы JAR, такие как rt.jar и т. д., слишком велики для использования на небольших устройствах и в приложениях.
- Поскольку JDK слишком велик, наши приложения или устройства не могут обеспечить лучшую производительность.
- В текущей системе Java нет строгой инкапсуляции, потому что модификатор доступа “public” слишком открытый. К нему может получить доступ каждый.
- Поскольку JDK, JRE слишком велики, тестирование и поддержка приложений затруднены.
- Поскольку модификатор “public” слишком открыт, нельзя предотвратить доступ к некоторым внутренним нетребовательным API, таким как sun.*, *.internal.* и т. д.
- Поскольку пользователь также может получить доступ к внутренним API, безопасность также является большой проблемой.
- Приложение слишком велико.
- Немного сложно обеспечить меньшую связь между компонентами.
Чтобы решить все эти проблемы, корпорация Oracle планирует выпустить систему модулей Java в версии Java SE 9.
Преимущества системы модулей Java SE 9
Java SE 9 Модульная система собирается предоставить следующие преимущества
- Поскольку Java SE 9 собирается разделять JDK, JRE, JAR и т. д. на более мелкие модули, мы сможем использовать любые модули, которые нам нужны. Так что очень легко масштабировать Java-приложение для маленьких устройств.
- Простота тестирования и обслуживания.
- Поддержка более высокой производительности.
- Так как public больше не просто public, это поддерживает очень сильное инкапсулирование. (Не волнуйтесь, это большая концепция. Мы скоро рассмотрим ее с помощью нескольких полезных примеров).
- Мы больше не можем получить доступ к внутренним некритическим API.
- Модули могут скрывать нежелательные и внутренние детали очень безопасно, мы можем получить лучшую безопасность.
- Приложение слишком мало, потому что мы можем использовать только те модули, которые нам нужны.
- Легко поддерживать меньшую связь между компонентами.
- Легко поддерживать принцип единственной ответственности (SRP).
Мы рассмотрим все эти концепции по очереди вскоре.
Сравнение JDK 8 и JDK 9
Мы знаем, что содержится в программном обеспечении JDK. После установки программного обеспечения JDK 8 мы видим несколько каталогов, таких как bin, jre, lib и т. д. в папке Java Home. Однако корпорация Oracle изменила эту структуру папок немного по-другому, как показано ниже. Структура папок JDK 8:
Структура папок JDK 9:
Здесь JDK 9 НЕ содержит JRE. В JDK 9 JRE выделен в отдельную папку дистрибутива. Программное обеспечение JDK 9 содержит новую папку “jmods”. Она содержит набор модулей Java 9, как показано ниже. В JDK 9 отсутствуют rt.jar и tools.jar
ПРИМЕЧАНИЕ:- На сегодняшний день в “jmods” содержится 95 модулей. Это количество может увеличиться в окончательной версии. Папка “jmods” доступна по пути ${JAVA_HOME}/jmods. Эти модули известны как модули JDK.
Что такое модуль Java 9?
A Module is a self-describing collection of Code, Data, and some Resources. It is a set of related Packages, Types (classes, abstract classes, interfaces etc) with Code & Data and Resources. Each Module contains only a set of related code and data to support Single Responsibility (Functionality) Principle (SRP). The main goal of Java 9 Module System is to support Modular Programming in Java. We will discuss on “What is a Module Descriptor” and “How to develop Java Modules” in my coming posts.
Мать системы модулей Java 9
На данный момент в Java 9 Module System есть 95 модулей в Early Access JDK. Корпорация Oracle разделила JDK-архивы и Java SE-спецификации на два набора модулей.
- Все модули JDK начинаются с “jdk.*”.
- Все модули Java SE-спецификаций начинаются с “java.*”.
В Java 9 Module System есть модуль “java.base”. Он известен как базовый модуль. Он является независимым модулем и не зависит от других модулей. По умолчанию все остальные модули зависят от этого модуля. Поэтому модуль “java.base” также известен как мать модулей Java 9. Это модуль по умолчанию для всех модулей JDK и пользовательских модулей.
Сравнение приложений Java 8 и Java 9
Мы уже разработали множество приложений на Java с использованием версий Java 5, 6, 7 или 8. Мы знаем, как выглядят и что содержат приложения на Java 8 или более ранних версий. Кратко описал структуру приложений на Java 8 в виде диаграммы ниже: В приложениях на Java 8 или более ранних версий верхний компонент – это пакет. Он группирует связанные типы в одну группу и содержит ресурсы. Приложения на Java 9 практически не отличаются от этого. В них просто добавлен новый компонент, называемый “Модуль”, который используется для группировки связанных пакетов. Еще один новый компонент – это дескриптор модуля (“module-info.java”). В остальном приложение остается таким же, как в более ранних версиях, как показано ниже.
Как приложения на Java 8 имеют пакеты в качестве верхних компонентов, приложения на Java 9 имеют Модуль в качестве верхних компонентов. Примечание: каждый модуль Java 9 имеет ровно один модуль и один дескриптор модуля. В отличие от пакетов в Java 8, нельзя создать несколько модулей в одном модуле. Кратко говоря, я могу сказать, что модуль Java 9 содержит следующие основные компоненты:
- Один модуль
- Имя модуля
- Дескриптор модуля
- Набор пакетов
- Набор типов и ресурсов
Вот ресурсы могут быть module-info.java (Module Descriptor) или любые другие свойства или XML. Мы обсудили слишком много теории в этом сообщении. Я думаю, этого достаточно для понимания основ Java 9 Module System. Мы начнем разработку базового модуля в моем следующем сообщении. Я буду обсуждать дополнительные концепции теории или терминологии Java 9 Module System по мере необходимости. Вот и все по теме “Введение в Java 9 Module System”. Мы обсудим еще несколько концепций Java SE 9 Module System в моих следующих сообщениях. Пожалуйста, оставьте комментарий, если вам понравилась моя статья, или если у вас есть какие-либо вопросы/предложения/ошибки в типах. Спасибо за чтение моих учебных пособий. Счастливого обучения Java SE 9! Ссылка: Project Jigsaw
Source:
https://www.digitalocean.com/community/tutorials/java-9-modules