Что такое JLink в Java и для чего он используется?

Ответ

JLink (Java Linker) — это утилита, появившаяся в Java 9, которая позволяет создавать пользовательские образы времени выполнения (Custom Runtime Images). Она выполняет статическую линковку, включая в итоговый образ только те модули JDK и зависимости, которые действительно нужны приложению.

Основная цель: уменьшить размер развертываемого приложения и улучшить производительность за счет исключения неиспользуемых частей JRE.

Базовое использование:

# Создание образа для модульного приложения
jlink --module-path $JAVA_HOME/jmods:mlib --add-modules com.myapp --output myapp-image

Ключевые параметры:

  • --module-path: Путь к модулям приложения и JMOD-файлам JDK.
  • --add-modules: Список корневых модулей для включения (транзитивные зависимости добавляются автоматически).
  • --output: Директория для создания пользовательского образа.
  • --compress: Сжатие для уменьшения размера (например, --compress=2).
  • --strip-debug: Удаление отладочной информации.

Результат: В директории myapp-image будет содержаться минимальная JRE и ваше приложение. Запуск осуществляется через myapp-image/bin/java -m com.myapp/com.myapp.Main.

Ответ 18+ 🔞

Да ты посмотри, что эти умники в Java придумали! JLink, блядь! Это ж как отвёртка, которой можно от JDK всё лишнее открутить, оставив только то, что реально нужно. Представь: раньше ты таскал с собой целый склад — стандартную JRE, а там дохуя всего, что твоему приложению нахуй не упёрлось. А теперь — взял, выкинул всё ненужное, и получился такой компактный чемоданчик, только с необходимым.

Зачем это, спрашивается? А чтобы приложение меньше весило, блядь, и быстрее стартовало! Не тащить же за собой всю библиотеку, если ты пользуешься только одной книжкой, верно?

Как этим пользоваться, если руки не из жопы? Всё просто, смотри:

# Берём наши модули и модули JDK, скрещиваем, получаем свой образ
jlink --module-path $JAVA_HOME/jmods:mlib --add-modules com.myapp --output myapp-image

Что тут важно, ёпта?

  • --module-path: Сюда ты суёшь пути, где лежат твои модули и эти самые JMOD-файлы от JDK. Без этого — нихуя не соберётся.
  • --add-modules: А тут ты говоришь, с какого модуля начинать. JLink сам, хитрая жопа, подтянет все зависимости, которые этому модулю нужны. Автоматом, блядь!
  • --output: Куда сложить получившийся красавец-образ. Укажи папку.
  • --compress: Хочешь ещё меньше размер? Жми на сжатие, например, --compress=2. Выжмешь как лимон.
  • --strip-debug: А это чтобы отладочную инфу выкинуть, она тоже место жрёт. Для прода — самое то.

И что в итоге? В папке myapp-image у тебя будет твоя личная, облегчённая JRE, с твоим приложением внутри. Запускается это чудо так: myapp-image/bin/java -m com.myapp/com.myapp.Main. Никаких лишних телодвижений, всё на месте. Красота, да и только!