Jak sprawdzić, czy JRE lub JDK jest zainstalowane


137

Mam jeden komputer, na którym celowo zainstalowałem JDK. Mam inny komputer z JRE, między innymi do testowania. Jednak kiedy dostałem aplikację java działającą na tym komputerze, a potem wypróbowałem ją na innym, narzekała, że ​​JDK jest wymagany. Jak mogę sprawdzić, czy JDK został w jakiś sposób zainstalowany w moim systemie? Uwaga: omawiany komputer to Mac.


1
Czy możesz opublikować pełny tekst błędu, w tym sposób, w jaki próbujesz go uruchomić? Nie potrzebujesz JDK do uruchomienia programu w Javie, wystarczy JRE.
— Kevin Workman,

To był komputer przyjaciela - coś o instalowaniu narzędzi wiersza poleceń. Skomentuję ponownie, gdy będę miał okazję ponownie to sprawdzić.
— PopKernel

Wygląda na to, że możesz mówić o upewnieniu się, że Java jest na twojej drodze, ale to tylko przypuszczenie. Tak czy inaczej, do uruchamiania programów Java potrzebujesz tylko środowiska JRE. Aby je skompilować, potrzebujesz JDK.
— Kevin Workman

Tylko nieliczne programy java potrzebują JDK, IDE, kontenerów serwletów, takich jak tomcat do kompilowania stron JSP i kilka innych. W jakiej aplikacji występuje problem?
— Arne Burmeister

Odpowiedzi:


162

Możesz otworzyć terminal i po prostu wpisać

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

powinno to pokazać wersję java zainstalowaną w systemie (zakładając, że ustawiłeś ścieżkę do javy w środowisku systemowym).

A jeśli nie, dodaj go przez

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

a jeśli nie jesteś pewien, czy w ogóle masz w systemie Javę, po prostu użyj findw terminalu

to znaczy find / -name "java"


1
@MaciejCygan, Dlaczego moja JAVA_HOME wskazuje na JRE zamiast JDK?
— Pacerier

@Pacerier Dlaczego ?? nie wiem, że na pewno lol !. Może nie masz zainstalowanego JDK? Uruchamianie systemu Windows lub Linux?
— Maciej Cygan

@MaciejCygan, używam okien. Tak, mam też zainstalowany JDK.
— Pacerier,

@Pacerier Możesz edytować / lub wprowadzić wpis, jeśli go nie znaleziono - wewnątrz zmiennych środowiskowych.
— Maciej Cygan,

@MaciejCygan, tak, ale dlaczego moja JAVA_HOME wskazuje na JRE zamiast JDK?
— Pacerier,

18

Zwykle instalacja jdk ma javac w zmiennych ścieżkach środowiskowych ... więc jeśli sprawdzisz javac w ścieżce, jest to całkiem dobry wskaźnik, że masz zainstalowany jdk.


3
Zdaję sobie sprawę, że OP pytał o Maca, więc może być tam inaczej. Ale jeśli chodzi o system Windows, ten test nie wydaje się wiarygodny. Właśnie sprawdziłem i NIE mam javacna swojej ścieżce, ale mam zainstalowany jdk. (W moim przypadku mój JAVA_HOME jest wskazany C:\Program Files\Java\jdk1.8.0_45)
— kmote

Tak, masz rację, ponieważ javac faktycznie znajduje się w% JAVA_HOME% \ bin
— Hamed

6

@ maciej-cygan dobrze opisał proces, jednak aby znaleźć ścieżkę java:

$ which java

podaje ścieżkę do javapliku binarnego, który jest połączonym plikiem w /usr/binkatalogu. Kolejny:

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

znajdź wskazaną lokalizację, która jest następująca (dla mnie):

wprowadź opis obrazu tutaj następnie cddo wskazanego katalogu, aby znaleźć rzeczywisty katalog domowy dla Javy. Kolejny:

$ ls -la | grep java

co w tym przypadku wygląda następująco:

wprowadź opis obrazu tutaj

więc jak widać na zrzucie ekranu, mój katalog domowy Java to /usr/lib/jvm/java-11-openjdk-amd64. Więc odpowiednio muszę dodać JAVA_HOME do mojego profilu (bash .bashrc, .bash_profileitp zależności od systemu operacyjnego) jak poniżej:

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

Proszę bardzo!



0

Ogólne, czyste rozwiązanie w języku Java.

W przypadku systemów Windows i MacOS można wywnioskować (w większości przypadków) ...

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

Jednak ... w systemie Linux nie jest to tak niezawodne ... Na przykład ...

  • Wiele środowisk JRE w systemie Linux zawiera openjdkścieżkę
  • Nie ma gwarancji, że środowisko JRE nie zawiera również JDK.

Więc bardziej bezpiecznym podejściem jest sprawdzenie istnienia javacpliku wykonywalnego.

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;
}

Ostrzeżenie: to nadal się nie powiedzie w przypadku combo JRE + JDK, które zgłaszają sun.boot.library.pathidentyczne JRE między JRE i JDK. Na przykład JDK Fedory nie powiedzie się (lub przejdzie w zależności od tego, jak na to spojrzysz), gdy powyższy kod zostanie uruchomiony. Zobacz testy jednostkowe poniżej, aby uzyskać więcej informacji ...

Testy jednostkowe:

# 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

dany komputer to Mac.

Rozwiązanie tylko dla macOS:

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

Gdzie 1.8+jest Java 1.8 lub nowsza.

Niestety, java_homepomocnik nie ustawia właściwego kodu powrotu, więc sprawdzenie, czy nie wystąpiły błędy, wymaga przeanalizowania danych wyjściowych (np. 2>&1 |grep -v "Unable"), Które różnią się w zależności od ustawień regionalnych.

Uwaga, Java może również istnieć w /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin, ale w chwili pisania tego nie wiem, że instaluje się tam środowisko JRE, które również zawiera javac.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.