Как узнать, использую ли я Open JDK или Oracle JDK?

Использование Java -версии дает мне это.

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?

4 ответа

Решение

Я думаю, что вы используете OracleJDK.

Как я увидел в поиске Google, вывод openJDK --version выглядит так:

Java-версия

openjdk версия "1.8.0-внутренний"

Среда выполнения OpenJDK (сборка 1.8.0-internal-0)

OpenJDK 64-битная нулевая виртуальная машина (сборка 25.0-b20-внутренняя, интерпретированный режим)

Смотрите: http://mail.openjdk.java.net/pipermail/jdk8-dev/2013-July/002840.html

На debian, jessie-backports, 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".

На основе фактического теста, который я провел в своей системе с использованием 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.nameили же java.runtime.nameсистемное свойство.
  • Я думаю, поскольку Oracle по-прежнему является ключевым участником / ответственным за проект OpenJDK, поэтому, если вы используете java.vm.vendorили же java.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

Вызов sun.misc.Version#println в коде Java будет выводить информацию о версии в stderr. Если вы хотите получить версию JDK из кода Java.

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)
Другие вопросы по тегам