JEP 282: jlink: The Java Linker
jlink: компоновщик Java
| Автор | Jean-Francois Denise |
| Ответственный | Jim Laskey |
| Тип | Feature |
| Область | JDK |
| Статус | Closed / Delivered |
| Выпуск | 9 |
| Компонент | tools / jlink |
| Обсуждение | jigsaw dash dev at openjdk dot java dot net |
| Трудоёмкость | L |
| Длительность | L |
| Зависит от | JEP 261: Module System |
| Связан с | JEP 220: Modular Run-Time Images |
| JEP 275: Modular Java Application Packaging | |
| Рецензенты | Alan Bateman, Alex Buckley, Iris Clark, Jim Laskey, Mandy Chung, Mark Reinhold |
| Одобрен | Brian Goetz |
| Создан | 2015/07/16 12:55 |
| Обновлён | 2017/05/19 02:01 |
| Задача | 8131679 |
Аннотация
Создать инструмент, который может собрать и оптимизировать набор модулей и их зависимостей в пользовательский образ среды выполнения, как определено в JEP 220.
Что не является целью
Этот JEP не обязывает получившийся инструмент создавать что-либо, кроме модульного образа среды выполнения.
Целью этого JEP не является определение стандартного или поддерживаемого API для плагинов. Вместо этого API плагинов будет строго экспериментальным. В одном из будущих JEP к этой теме можно будет вернуться, когда будет накоплен опыт использования API плагинов, определённого этим JEP.
Мотивация
JEP 261 определяет время компоновки как необязательную фазу между фазами компиляции (команда javac) и выполнения (средство запуска java). Для фазы компоновки нужен инструмент компоновки, который соберёт и оптимизирует набор модулей и их транзитивных зависимостей, чтобы создать образ среды выполнения или исполняемый файл.
Время компоновки даёт возможность выполнить оптимизации с учётом всей программы, которые иначе трудно выполнить при компиляции или дорого выполнять во время работы программы. Например, можно оптимизировать вычисление, когда все его входные данные становятся константами (т. е. перестают быть неизвестными). Следующей оптимизацией может быть удаление кода, который больше недостижим.
Описание
Базовый вызов инструмента компоновки jlink выглядит так:
$ jlink --module-path <modulepath> --add-modules <modules> --limit-modules <modules> --output <path>
где:
-
--module-path— путь, по которому компоновщик будет искать наблюдаемые модули; это могут быть модульные JAR-файлы, файлы JMOD или распакованные модули -
--add-modulesзадаёт модули, добавляемые в образ среды выполнения; через транзитивные зависимости эти модули могут повлечь добавление других модулей -
--limit-modulesограничивает множество наблюдаемых модулей -
--output— каталог, в котором будет находиться получившийся образ среды выполнения
Параметры --module-path, --add-modules и --limit-modules подробнее описаны в JEP 261.
Среди других параметров, которые будет поддерживать jlink:
--helpдля вывода справки по использованию--versionдля вывода информации о версии
Альтернативы
Альтернатива инструменту компоновки — использовать платформенно-зависимые скрипты сборки образов JDK и JRE. При таком подходе создавать пользовательские образы среды выполнения было бы трудно.
Тестирование
Помимо ожидаемого набора модульных тестов для проверки инструмента I, сборка JDK будет регулярно задействовать jlink при создании образов среды выполнения JDK и JRE.
Риски и допущения
Набор требований к инструменту на данный момент не полон. Ожидается, что расширяемость инструмента будет развиваться.
Зависимости
-
Этот JEP зависит от системы модулей, которая будет специфицирована в JSR 376 (Java Platform Module System) и реализована в JEP 261: Module System.
-
В первоначальной реализации JEP 220 в JDK 9 для построения образов JRE и JDK используется специальный инструмент, работающий во время сборки. Этот инструмент будет заменён на
jlink.