Java -Version的秘密

本文详细介绍了如何修改OpenJDK源码,以改变`java -version`命令的输出信息。通过配置编译参数,调整`Version.java.template`、`GensrcMisc.gmk`和`spec.gmk.in`等文件,可以定制自己的JDK版本标识,模仿业界知名发行版如腾讯Kona、阿里Dragonwell和华为bisheng的做法,实现个性化JDK。
摘要由CSDN通过智能技术生成

当我们执行 java -version 命令时,通常会看到如下信息。

java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode

当然,这是 oracle jdk 8u201 版本的输出结果。

如果我们是用的是 openJDK 构建出的 jdk 来看,它会是这样的。

openjdk version "1.8.0-internal"
OpenJDK Runtime Environment (build 1.8.0-internal-root_2022_06_08_12_25-b00)
OpenJDK 64-Bit Server VM (build 25.71-b00, mixed mode

当然,这是在没有修改源码且没有增加多余 configure 参数构建出的结果。

今天我想改一改这个输出信息,让它成为我自己拥有的 jdk,应该怎么办呢?

首先,我们下载 openjdk 8u312 版本的源码,可以从 openjdk 官网下载,也可以从一个更开发者友好的 adoptopenjdk 网站下载。

https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries

下载好源码后,我们一顿操作猛如虎,配置、编译、打断点、运行调试,进入了 java -version 命令所执行到的关键源码位置。

可以看出,它最终执行了 sun/misc/Version 类的 print 方法,我们打开这个类。

public class Version {
    private static final String launcher_name = 
        "openjdk";
 private static final String java_version = 
        "1.8.0-internal-debug";
    private static final String java_runtime_name = 
        "OpenJDK Runtime Environment";
    private static final String java_profile_name = 
        "";
    private static final String java_runtime_version = 
        "1.8.0-internal-debug-root_2022_06_09_16_41-b00";

    public static void print() {
        print(System.err);
    }

    public static void print(PrintStream ps) {
      ...
        /* First line: platform version. */
        ps.println(launcher_name + " version \"" + java_version + "\"");
  ...
        /* Second line: runtime version (ie, libraries). */
        ps.print(java_runtime_name + " (build " + java_runtime_version);
  ...
        /* Third line: JVM information. */
        String java_vm_name    = System.getProperty("java.vm.name");
        String java_vm_version = System.getProperty("java.vm.version");
        String java_vm_info    = System.getProperty("java.vm.info");
        ps.println(java_vm_name + " (build " + java_vm_version + ", " + java_v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值