Java SE 9 多版本兼容 JAR 包示例

本文详细介绍了如何在Java 9及更高版本中创建和使用多版本兼容的JAR包,包括命令行编译示例和Maven项目配置。通过这种方式,可以在同一个JAR中包含不同Java版本的class文件,实现跨版本兼容,避免升级冲突。文中给出了具体的编译、打包和测试步骤。
摘要由CSDN通过智能技术生成

说明

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值