5.8 KiB
aliases | tags | date | zero-link | parents | linked | |
---|---|---|---|---|---|---|
|
2024-10-15 |
JLink — это мощный инструмент, который был введён в ../../../../knowledge/dev/java/Java 9 как часть модульной системы Java Platform Module System. Его основная задача — создание кастомизированных JDK, включающих только необходимые модули для работы конкретного приложения.
Благодаря исключению ненужных модулей, приложения, собранные с помощью JLink, становятся легче и быстрее загружаются. Это особенно важно для приложений, работающих в ограниченных средах, например, в микросервисной архитектуре или на встраиваемых устройствах. Меньший размер JRE снижает время старта и использование оперативной памяти, что критично в условиях ограниченных ресурсов.
Например, обычный JRE содержит десятки модулей, таких как java.sql
или java.xml
, которые могут быть не нужны конкретному приложению. Используя JLink, разработчик может создать минимальный набор модулей, достаточный для его проекта.
Основная команда JLink выглядит следующим образом:
jlink --module-path $JAVA_HOME/jmods --add-modules <список модулей> --output <путь_к_результирующей_JRE>
--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:
jlink --add-modules $(jdeps --multi-release 17 --ignore-missing-deps -q -recursive --print-module-deps -cp 'project-core/build/lib/boot/*':'project-core/build/lib/main/*':'project-core/build/app/*' project-core/build/app/*) --strip-debug --no-man-pages --no-header-files --compress=2 --output ./build/jdk
Мета информация
Область:: ../../meta/zero/00 Java разработка Родитель:: Источник:: Создана:: 2024-10-15 Автор::