Files
digital-garden/dev/java/Multi-Release JAR.md
Struchkov Mark 9462743dc9
All checks were successful
continuous-integration/drone/push Build is passing
Multi-Release JAR.md
2025-02-26 15:12:07 +03:00

3.0 KiB
Raw Blame History

aliases, tags, date
aliases tags date
MR-JAR
maturity/🌱
2025-02-26

При разработке библиотек часто требуется поддерживать несколько версий Java. В стандартном JAR-файле все классы работают на минимальной поддерживаемой версии JDK, что накладывает ограничения на использование новых возможностей языка и API.

MR-JAR решает эту проблему, позволяя включать в один JAR-файл классы, оптимизированные для разных версий Java. Это особенно полезно для библиотек, которые:

  • Должны поддерживать старые версии JDK.
  • Хотят использовать новые API в современных версиях.
  • Избегают дублирования кода в отдельных JAR-файлах под каждую версию Java.

Структура MR-JAR

Файлы, специфичные для версий Java, размещаются внутри JAR-файла в каталоге META-INF/versions/{версия}/. Пример структуры MR-JAR:

my-library.jar
├── META-INF/
│   ├── versions/
│   │   ├── 9/
│   │   │   ├── MyClass.class  (оптимизирован для Java 9)
│   │   ├── 11/
│   │   │   ├── MyClass.class  (оптимизирован для Java 11)
│   │   ├── 17/
│   │   │   ├── MyClass.class  (оптимизирован для Java 17)
├── MyClass.class  (базовая версия)

Когда JVM загружает классы, она выбирает наиболее подходящую версию:

  • Если используется JDK 8, загружается MyClass.class из корня.
  • Если JDK 9, 11 или 17, JVM выбирает класс из соответствующего каталога META-INF/versions/{версия}/.

Создание MR-JAR

Создать MR-JAR можно с помощью jar-утилиты:

jar --create --file my-library.jar --main-class com.example.Main -C classes . \
    --release 9 -C classes-java9 . \
    --release 11 -C classes-java11 .

Здесь:

  • classes — базовая версия классов (Java 8 и младше).
  • classes-java9 — версия классов для Java 9.
  • classes-java11 — версия классов для Java 11.

Мета информация

Область:: ../../meta/zero/00 Java разработка Родитель:: Источник:: Создана:: 2025-02-26 Автор::

Дополнительные материалы

Дочерние заметки