openjdk.ruOpenJDK на русском

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.