Как определить, установлена ​​ли JRE или JDK?

134

У меня есть один компьютер, на котором я намеренно установил JDK. У меня есть другой компьютер с JRE для тестирования. Однако, когда я получил приложение Java, работающее на этом компьютере, а затем попробовал его на другом, он пожаловался на необходимость JDK. Как я могу проверить, был ли JDK каким-либо образом установлен в моей системе? Примечание: рассматриваемый компьютер - Mac.

PopKernel
источник
1
Можете ли вы опубликовать полный текст ошибки, в том числе, как вы пытаетесь ее запустить? Вам не нужен JDK для запуска Java-программы, только JRE.
Кевин Воркман
Это был компьютер друзей - кое-что об установке инструментов командной строки. Я прокомментирую снова, когда у меня будет возможность проверить это снова.
PopKernel
Похоже, вы говорите о том, чтобы убедиться, что Java находится на вашем пути, но это только предположение. В любом случае вам нужна только JRE для запуска программ на Java. Вам нужен JDK для их компиляции.
Кевин Воркман
Лишь немногие java-программы нуждаются в JDK, IDE, контейнерах сервлетов, таких как tomcat, для компиляции JSP и некоторых других. В каком приложении есть проблема?
Арне Бурмейстер

Ответы:

159

Вы можете открыть терминал и просто набрать

java -version // this will check your jre version
javac -version // this will check your java compiler version if you installed 

это должно показать вам версию Java, установленную в системе (при условии, что вы установили путь Java в системной среде).

А если нет, добавьте его через

export JAVA_HOME=/path/to/java/jdk1.x

и если вы не уверены, что у вас есть Java в вашей системе, просто используйте findв терминале

т.е. find / -name "java"

Мацей Сиган
источник
1
@MaciejCygan, почему мой JAVA_HOME указывает на JRE вместо JDK?
Pacerier
@Pacerier Почему ?? Я не знаю, что точно LOL! Может быть, у вас не установлен JDK? Запуск Windows или Linux?
Мацей Сиган
@MaciejCygan, я использую Windows. Да, у меня тоже установлен JDK.
Pacerier
@Pacerier Вы можете редактировать / или делать запись, если ничего не найдено - внутри ваших переменных среды.
Мацей Сиган
@MaciejCygan, да, но почему мой JAVA_HOME указывает на JRE вместо JDK?
Pacerier
18

Обычно установка jdk содержит javac в переменных пути среды ... так что если вы проверяете наличие javac в пути, это в значительной степени хороший индикатор того, что у вас установлен jdk.

Shiraaz.M
источник
3
Я понимаю, что ОП спрашивал о Mac, поэтому там может быть по-другому. Но что касается Windows, этот тест не кажется надежным. Я только что проверил, и у меня нет javacна моем пути, но у меня действительно есть JDK установлен. (В моем случае указан мой JAVA_HOME C:\Program Files\Java\jdk1.8.0_45)
kmote
Да, вы правы, потому что на самом деле javac находится в% JAVA_HOME% \ bin
Хамед
6

@ maciej-cygan хорошо описал процесс, однако, чтобы найти ваш путь в Java:

$ which java

он дает вам путь javaдвоичного файла, который является связанным файлом в /usr/binкаталоге. следующий:

$ cd /usr/bin/ && ls -la | grep java

найдите указанное место, которое выглядит следующим образом (для меня):

введите описание изображения здесь затем cdв указанный каталог, чтобы найти настоящий домашний каталог для Java. следующий:

$ ls -la | grep java

что в данном случае выглядит следующим образом:

введите описание изображения здесь

так как это видно на скриншоте, мой домашний каталог Java есть /usr/lib/jvm/java-11-openjdk-amd64. Поэтому , соответственно , мне нужно добавить JAVA_HOME в профиль Баш ( .bashrc, .bash_profileи т.д. в зависимости от вашей операционной системы) , как показано ниже:

JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"

Ну вот!

Шаян Амани
источник
0

согласно документации JAVA, JDK должен быть установлен по этому пути:

/Library/Java/JavaVirtualMachines/jdkmajor.minor.macro[_update].jdk

См. Раздел удаления JDK по адресу https://docs.oracle.com/javase/8/docs/technotes/guides/install/mac_jdk.html.

Так что если вы можете найти такую ​​папку, то JDK установлен

Ю Лян
источник
0

Общее решение на чистом Java.

Для Windows и MacOS можно сделать следующие выводы (в большинстве случаев) ...

public static boolean isJDK() {
    String path = System.getProperty("sun.boot.library.path");
    if(path != null && path.contains("jdk")) {
        return true;
    }
    return false;
}

Однако ... в Linux это не так надежно ... Например ...

  • Многие JRE в Linux содержат openjdkпуть
  • Нет гарантии, что JRE также не содержит JDK.

Таким образом, более надежный подход - это проверить наличие javacисполняемого файла.

public static boolean isJDK() {
    String path = System.getProperty("sun.boot.library.path");
    if(path != null) {
        String javacPath = "";
        if(path.endsWith(File.separator + "bin")) {
            javacPath = path;
        } else {
            int libIndex = path.lastIndexOf(File.separator + "lib");
            if(libIndex > 0) {
                javacPath = path.substring(0, libIndex) + File.separator + "bin";
            }
        }
        if(!javacPath.isEmpty()) {
            return new File(javacPath, "javac").exists() || new File(javacPath, "javac.exe").exists();
        }
    }
    return false;
}

Предупреждение: это все равно не удастся для комбинаций JRE + JDK, которые sun.boot.library.pathидентично сообщают JRE между JRE и JDK. Например, JDK Fedora завершится ошибкой (или пройдет, в зависимости от того, как вы на это посмотрите) при выполнении вышеуказанного кода. Подробнее см. Ниже модульные тесты ...

Модульные тесты:

# Unix
java -XshowSettings:properties -version 2>&1|grep "sun.boot.library.path"
# Windows
java -XshowSettings:properties -version 2>&1|find "sun.boot.library.path"
    # PASS: MacOS AdoptOpenJDK JDK11
    /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/lib

    # PASS: Windows Oracle JDK12
    c:\Program Files\Java\jdk-12.0.2\bin

    # PASS: Windows Oracle JRE8
    C:\Program Files\Java\jre1.8.0_181\bin

    # PASS: Windows Oracle JDK8
    C:\Program Files\Java\jdk1.8.0_181\bin

    # PASS: Ubuntu AdoptOpenJDK JDK11
    /usr/lib/jvm/adoptopenjdk-11-hotspot-amd64/lib

    # PASS: Ubuntu Oracle JDK11
    /usr/lib/jvm/java-11-oracle/lib

    # PASS: Fedora OpenJDK JDK8
    /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.fc24.x86_64/jre/lib/amd64

    #### FAIL: Fedora OpenJDK JDK8
    /usr/java/jdk1.8.0_231-amd64/jre/lib/amd64
tresf
источник
0

рассматриваемый компьютер - Mac.

Решение только для macOS:

/usr/libexec/java_home -v 1.8+ --exec javac -version

Где 1.8+Java 1.8 или выше.

К сожалению, java_homeпомощник не устанавливает правильный код возврата, поэтому проверка на сбой требует синтаксического анализа вывода (например 2>&1 |grep -v "Unable"), который зависит от языкового стандарта.

Обратите внимание: Java также может существовать в /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin, но на момент написания этой статьи я не знал, что там устанавливается JRE, которая также содержит javac.

tresf
источник