Як сказати, чи встановлено JRE або JDK


134

У мене є один комп’ютер, на який я навмисно встановив JDK. У мене є ще один комп’ютер з JRE для, серед іншого, тестування. Однак, коли я отримав програму java, яка працює на цьому комп’ютері, а потім спробувала її на іншому, вона поскаржилася, що потрібен JDK. Як я можу перевірити, чи JDK якимось чином встановлено у моїй системі? Примітка: комп’ютер, про який йде мова, є Mac.


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 Чому ?? я не знаю, що точно, хаха !. Можливо, у вас не встановлено JDK? Запуск Windows або Linux ??
Maciej Cygan

@MaciejCygan, я використовую Windows. Так, у мене також встановлений JDK.
Pacerier

@Pacerier Ви можете редагувати / або вносити записи, якщо таких не знайдено - всередині змінних навколишнього середовища.
Maciej Cygan

@MaciejCygan, так, але чому мій JAVA_HOME вказує на JRE замість JDK?
Печер'є

18

Зазвичай установка jdk має javac у змінні шляху середовища ... тому, якщо ви перевіряєте javac на шляху, це майже хороший показник того, що у вас встановлений jdk.


3
Я розумію, що ОП запитували про Mac, тож там може бути інакше. Але що стосується Windows, то цей тест не здається надійним. Я щойно перевірив, а НЕ маюjavac на своєму шляху, але в мене встановлено jdk. (У моєму випадку вказується мій JAVA_HOME C:\Program Files\Java\jdk1.8.0_45)
kmote

Так, ти маєш рацію, тому що javac насправді знаходиться у% JAVA_HOME% \ bin
Hamed

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, які повідомляють JREsun.boot.library.path однакове між 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

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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.