Java 9 多版本兼容 jar 包

多版本兼容 JAR 功能能让你创建仅在特定版本的 Java 环境中运行库程序时选择使用的 class 版本。

通过 —release 参数指定编译版本。

具体的变化就是 META-INF 目录下 MANIFEST.MF 文件新增了一个属性:

  1. Multi-Release: true

然后 META-INF 目录下还新增了一个 versions 目录,如果是要支持 java9,则在 versions 目录下有 9 的目录。

  1. multirelease.jar
  2. ├── META-INF
  3. └── versions
  4. └── 9
  5. └── multirelease
  6. └── Helper.class
  7. ├── multirelease
  8. ├── Helper.class
  9. └── Main.class

在以下实例中,我们使用多版本兼容 JAR 功能将 Tester.java 文件生成了两个版本的 jar 包, 一个是 jdk 7,另一个是 jdk 9,然后我们再不同环境下执行。

第一步

创建文件夹 c:/test/java7/com/java,并在该文件夹下创建 Test.java 文件,代码如下:

  1. package com.java;
  2. public class Tester {
  3. public static void main(String[] args) {
  4. System.out.println("Inside java 7");
  5. }
  6. }

第二步

创建文件夹 c:/test/java9/com/java,并在该文件夹下创建 Test.java 文件,代码如下:

  1. package com.java;
  2. public class Tester {
  3. public static void main(String[] args) {
  4. System.out.println("Inside java 9");
  5. }
  6. }

编译源代码:

  1. C:\test > javac --release 9 java9/com/java/Tester.java
  2. C:\JAVA > javac --release 7 java7/com/java/Tester.java

创建多版本兼容 jar 包

  1. C:\JAVA > jar -c -f test.jar -C java7 . --release 9 -C java9.
  2. Warning: entry META-INF/versions/9/com/java/Tester.java,
  3. multiple resources with same name

使用 JDK 7 执行:

  1. C:\JAVA > java -cp test.jar com.java.Tester
  2. Inside Java 7

使用 JDK 9 执行:

  1. C:\JAVA > java -cp test.jar com.java.Tester
  2. Inside Java 9