Java 9 Multi-Release JAR: версии классов под разные платформы
Java 9 улучшила формат JAR: теперь в одном архиве могут храниться разные версии классов для разных версий платформы. В MANIFEST.MF добавляется запись Multi-Release: true. Директория META-INF/versions/ содержит поддиректории с версией (начиная с 9 для Java 9), где лежат версионно-зависимые классы и ресурсы.
Пример: два варианта Tester.java для JDK 7 и JDK 9
Шаг 1: версия для Java 7
c:/test/java7/com/tutorialspoint/Tester.java
package com.tutorialspoint;
public class Tester {
public static void main(String[] args) {
System.out.println("Inside java 7");
}
}
Шаг 2: версия для Java 9
c:/test/java9/com/tutorialspoint/Tester.java
package com.tutorialspoint;
public class Tester {
public static void main(String[] args) {
System.out.println("Inside java 9");
}
}
Компиляция
C:\test> javac --release 9 java9/com/tutorialspoint/Tester.java
C:\JAVA> javac --release 7 java7/com/tutorialspoint/Tester.java
Создание multi-release JAR
C:\JAVA> jar -c -f test.jar -C java7 . --release 9 -C java9 .
Warning: entry META-INF/versions/9/com/tutorialspoint/Tester.java, multiple resources with same name
Запуск на JDK 7
C:\JAVA> java -cp test.jar com.tutorialspoint.Tester
Inside Java 7
Запуск на JDK 9
C:\JAVA> java -cp test.jar com.tutorialspoint.Tester
Inside Java 9
JVM автоматически выбирает подходящую версию класса из META-INF/versions/N/.
java
- Освоение операторов Java: типы, синтаксис и практические примеры
- Комментарии в Java: типы, использование и лучшие практики
- Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
- Освоение строк в Java: создание, методы и лучшие практики
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Try-with-resources в Java: автоматическое управление ресурсами
- Аннотации в Java: типы, размещение и практические примеры
- Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода
- Понимание Java Vector: использование, особенности и сравнение с ArrayList