说明
Java 9 版本中增强了Jar 包多版本字节码文件格式支持,也就是说在同一个 Jar 包中我们可以包含多个 Java 版本的 class 文件,这样就能做到 Jar 包升级到新的 Java 版本时不用强迫使用方为了使用新 Jar 包而升级自己的业务模块 Java 版本,也不用针对不同最低支持 Java 版本提供不同的 Jar,真正的做到了一个 Jar 包兼容所有的目的。
本文通过以下示例来说明多版本 Jar 包的使用。
环境准备
机器上应该有多个版本的 JDK 用于测试,并且至少有一个是 JDK 9 或者更高版本。
命令行编译示例
注:本示例无需使用 IDE ,我们用最原始的方式创建一个多版本的 Jar 包。
新建一个文件夹,用项目名称命名,并且在其中把 src
目录,包名都建好,可以自定义,后续编译命令自行调整即可。
src\main\java\git\snippet
目录下存的是旧版本 JDK 编写的代码。在这个目录下新建两个类。
package git.snippet;
/**
* Java SE 9 Multi-Release JAR Files示例
*
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/8/14
* @since 9
*/
public class App {
public static void main(String[] args) {
Helper.hello(args[0]);
}
}
package git.snippet;
/**
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/8/14
* @since 1.7
*/
public class Helper {
public static void hello(String name) {
// jdk 9+不能用_作为变量
String _ = "hello";
System.out.println(_ + ", " + name);
}
}
src\main\java9\git\snippet
目录下存的是新版本 JDK 编写的代码。我们需要把 Helper
类用新的 JDK 版本特性来实现。代码如下
package git.snippet;
/**
* @author <a href="mailto:410486047@qq.com">Grey</a>
* @date 2022/8/14
* @since 9
*/
public class Helper {
public static void hello(String name) {
// 旧版本用_作为变量,jdk9不能用_作为变量
String fixName = "hello";
System.out.println(fixName + ", " + name + " from jdk9");
}
}
创建好上述类以后,项目结构如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aRXzHFCi-1660549797782)(https://upload-images.jianshu.io/upload_images/28376244-0e23dcb540a784d3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
接下来是编译,在项目目录下,用 JDK 9+的 javac