说明
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"); } }
创建好上述类以后,项目结构如下
接下来是编译,在项目目录下,用 JDK 9+的 javac
执行