Java 9 多版本相容 jar 包

Java 9 新特性 Java 9 新特性

多版本相容 JAR 功能能讓你創建僅在特定版本的 Java 環境中運行庫程式時選擇使用的 class 版本。

通過 --release 參數指定編譯版本。

具體的變化就是 META-INF 目錄下 MANIFEST.MF 檔新增了一個屬性:

Multi-Release: true

然後 META-INF 目錄下還新增了一個 versions 目錄,如果是要支持 java9,則在 versions 目錄下有 9 的目錄。

multirelease.jar
├── META-INF
│   └── versions
│       └── 9
│           └── multirelease
│               └── Helper.class
├── multirelease
    ├── Helper.class
    └── Main.class

在以下實例中,我們使用多版本相容 JAR 功能將 Tester.java 檔生成了兩個版本的 jar 包, 一個是 jdk 7,另一個是 jdk 9,然後我們再不同環境下執行。

第一步

創建檔夾 c:/test/java7/com/zaixian,並在該檔夾下創建 Test.java 檔,代碼如下:

package com.zaixian;

public class Tester {
   public static void main(String[] args) {
      System.out.println("Inside java 7");
   }
}

第二步

創建檔夾 c:/test/java9/com/zaixian,並在該檔夾下創建 Test.java 檔,代碼如下:

package com.zaixian;

public class Tester {
   public static void main(String[] args) {
      System.out.println("Inside java 9");
   }
}

編譯源代碼:

C:\test > javac --release 9 java9/com/zaixian/Tester.java

C:\JAVA > javac --release 7 java7/com/zaixian/Tester.java

創建多版本相容 jar 包

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

使用 JDK 7 執行:

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

使用 JDK 9 執行:

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

Java 9 新特性 Java 9 新特性