java 9新特性 多版本兼用jar

多版本兼用jar的作用

多版本JAR(MR JAR)可能包含同一類的多個變體,每個變體都針對特定的Java版本。 在運行時,類的正確變體將被自動加載,這取決于所使用的Java版本。這允許庫作者在早期利用新的Java版本,同時保持與舊版本的兼容性。

應(yīng)用場景:

比如某個架構(gòu)師開發(fā)了一個工具類MyUtils,該工具類里面使用了jdk9的新特性,這時候該 具在推廣的時候會遇到很大的阻力,因為很多用戶還沒有升級jdk版本,JDK9推出了多版本兼用jar的特性就允許該架構(gòu)師編寫一個同類名的工具MyUtils,并在該工具類中不使用jdk9的新特性,然后兩個同類名的類一起打包成為一個jar,提供給用戶去使用,這時候即可根據(jù)用戶當前使用的jdk版本而選擇不同的 工具類了。

util.jar
│ MyUtils.class
│
└─META-INF
    │ MANIFEST.MF
    │
    └─versions
        └─9
            MyUtils.clas

簡言之:該jar包在java 8中可以執(zhí)行最上層的MyUtils.class,在Java 9中自動選擇執(zhí)行目錄9下的 MyUtils.class。

第一步

創(chuàng)建文件夾 java,

并在該文件夾下創(chuàng)建 MyUtils.java 文件,代碼如下:

package com.muziwk.utils;

public class MyUtils {
    public static void print(){
         System.out.println("JDK8");
    }
}

第二步

創(chuàng)建文件夾 java9,并在該文件夾下創(chuàng)建 MyUtils.java 文件,代碼如下:

package com.muziwk.utils;
import java.util.stream.Stream;

    public class MyUtils {
    
        public static void print(){
             System.out.println("JDK9");
    }
}

第三步

在src目錄下編譯成class文件:

javac -d out --release 8 java/com/muziwk/utils/MyUtils.java
javac -d out9 --release 9 java9/com/muziwk/utils/MyUtils.java

第四步

在src目錄下把兩個版本的class文件打成jar包

jar --create --file util.jar -C out . --release 9 -C out9 .

第五步

新建一個模塊,并把該jar導入到模塊中,然后切換不同的jdk版本上去測試.

image-20211202174744403.png

小結(jié)

多版本兼用jar的作用

根據(jù)當前用戶安裝的jdk版本選擇性的使用具體類。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容