如何知道我是否正在使用Open JDK还是Oracle JDK?

26

使用 java -version 命令会显示如下结果。

java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

是 OpenJDK 还是 OracleJDK?


3
第二行提到了“HotSpot”,这是Oracle VM的内部名称,因此似乎指的是OracleJDK。 - Robert
首先要问自己的问题是:你在电脑上安装了哪个? - Stultuske
我已经在机器上安装了。它已经存在了。这是Oracle JDK。请查看答案。 - Abhishek Singh
如果我两个都安装了怎么办?这可能是默认的使用情况:我安装了两个,使用Oracle进行开发并使用OpenJDK发布...现在如何知道我正在使用哪一个构建? ¯\(ツ) - Ewoks
4个回答

17

我认为您正在使用OracleJDK。

通过谷歌搜索可以看到,openJDK --version 的输出如下:

java -version

openjdk版本"1.8.0-internal"

OpenJDK Runtime环境(构建1.8.0-internal-0)

OpenJDK 64位Zero虚拟机(构建25.0-b20-internal,解释模式)

请参见:http://mail.openjdk.java.net/pipermail/jdk8-dev/2013-July/002840.html


10
在Debian的Jessie后备软件库中,安装OpenJDK 8:
openjdk version "1.8.0_66-internal"
OpenJDK Runtime Environment (build 1.8.0_66-internal-b17)
OpenJDK 64-Bit Server VM (build 25.66-b17, mixed mode)

使用Ubuntu PPA安装Oracle Java 8:

java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)

我认为,字符串"java"开头表示Oracle Java,而OpenJDK则使用"openjdk"。


2

根据我在我的系统上使用Oracle JDK和OpenJDK进行的实际测试:

选项1

  • 您可以执行java –version命令,在OpenJDK的情况下,您将在输出中清楚地看到“openjdk”,而在Oracle JDK的情况下,您将在输出中看到“Hotspot”。这就是您可以区分它们的方法。
  • 以下是我系统上的实际情况:

C:\Users\himanshu.agrawal>"C:\E_Drive\Softwares\OpenJDK-java-se-7u75-ri\jre\bin\java" -version
openjdk version "1.7.0_75"
OpenJDK Runtime Environment (build 1.7.0_75-b13)
OpenJDK Client VM (build 24.75-b04, mixed mode)

C:\Users\himanshu.agrawal>java -version
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)

选项2

  • 您可以使用java.vm.namejava.runtime.name系统属性。
  • 我认为由于Oracle仍然是OpenJDK项目的主要贡献者/责任方,因此如果您使用java.vm.vendorjava.specification.vendor,您仍将获得Oracle作为供应商。
  • 以下是这些属性在我的系统上的实际输出:

// when using OpenJDK
java.vm.name = OpenJDK 64-Bit Server VM
java.runtime.name = OpenJDK Runtime Environment
java.vm.vendor = "Oracle Corporation"
java.specification.vendor = Oracle Corporation

// when using Oracle JDK
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
java.runtime.name = Java(TM) SE Runtime Environment
java.vm.vendor = Oracle Corporation
java.specification.vendor = Oracle Corporation

2

在Java代码中调用sun.misc.Version#println将会把版本信息输出到stderr。如果你想从Java代码中获取JDK的版本号。

最初的回答:

Call System.getProperty("java.version").

package bj.tmp;

import sun.misc.Version;

public class Foo {
    public static void main(String[] args) {
        Version.println();
    }
}

就像这样:

java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)

sun.misc.Version 似乎不再存在,至少截至 JDK 15。 - Stevey
没错。这基本上是 java -version 命令的输出结果。如果是 OpenJDK,那么输出中将会显示 "openjdk"。 - hagrawal7777

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接