多版本兼用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版本選擇性的使用具體類。