JLink — это мощный инструмент, который был введён в Java 9 как часть модульной системы JPMS. Его основная задача — создание кастомизированных JDK, включающих только необходимые модули для работы конкретного приложения.
Благодаря исключению ненужных модулей, приложения, собранные с помощью JLink, становятся легче и быстрее загружаются. Это особенно важно для приложений, работающих в ограниченных средах, например, в микросервисной архитектуре или на встраиваемых устройствах. Меньший размер JRE снижает время старта и использование оперативной памяти, что критично в условиях ограниченных ресурсов.
Например, обычный JRE содержит десятки модулей, таких как java.sql
или java.xml
, которые могут быть не нужны конкретному приложению. Используя JLink, разработчик может создать минимальный набор модулей, достаточный для его проекта.
Основная команда JLink выглядит следующим образом:
--module-path
указывает путь к модульной системе JDK, которая по умолчанию находится в папкеjmods
в вашем JDK.--add-modules
определяет, какие модули будут включены в итоговую сборку JRE. Это могут быть как модули стандартной библиотеки (например,java.base
), так и модули вашего приложения.--output
указывает папку, в которую будет выведена готовая сборка JRE.
Основные опции JLink
–-strip-debug
. Удаляет символы отладки из итоговой сборки JRE. Это помогает дополнительно уменьшить размер JRE, особенно когда приложение не нуждается в отладочной информации.--compress
. отвечает за сжатие файлов в сборке JRE. Она поддерживает несколько уровней сжатия:- 0 — без сжатия (по умолчанию),
- 1 — сжатие классов, но без применения дорогих методов сжатия,
- 2 — максимальное сжатие, что снижает размер сборки, но может замедлить время загрузки.
-–strip-native-commands
. Эта опция удаляет нативные команды (например, инструменты вроде jcmd, jmap, и другие утилиты), которые не нужны в большинстве рабочих окружений.--launcher
. Позволяет создавать собственные лаунчеры для вашего приложения. Это может быть полезно для упрощения запуска приложения конечными пользователями. Лаунчеры создаются в директории bin сгенерированной JRE. Пример--launcher myapp_launcher=myapp.module/com.example.Main
--bind-services
. Полезна для автоматического связывания сервисов, если приложение используетServiceLoader
. Эта опция необходима, когда модульная система управляет загрузкой сервисов, и их нужно зарегистрировать для запуска приложения.--target
. Позволяет создавать JRE для других платформ (например, создавать сборку для Linux с машины на Windows). Пример--target linux-x64
JDeps анализирует зависимости приложения, автоматически определяя, какие модули используются, а JLink на основе этого анализа создаёт кастомную JRE
Пример совместного использования JDeps и JLink:
Мета информация
Область:: 00 Java разработка
Родитель::
Источник::
Создана:: 2024-10-15
Автор::