Як сказати, чи встановлено 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.