So erkennen Sie, ob JRE oder JDK installiert ist


134

Ich habe einen Computer, auf dem ich JDK absichtlich installiert habe. Ich habe einen anderen Computer mit JRE, unter anderem zum Testen. Als ich jedoch eine Java-Anwendung auf diesem Computer zum Laufen brachte und sie dann auf einem anderen Computer ausprobierte, wurde beschwert, dass JDK erforderlich war. Wie kann ich überprüfen, ob JDK auf meinem System installiert wurde? Hinweis: Der betreffende Computer ist ein Mac.


1
Können Sie den vollständigen Text des Fehlers veröffentlichen, einschließlich der Art und Weise, wie Sie versuchen, ihn auszuführen? Sie benötigen nicht das JDK, um ein Java-Programm auszuführen, sondern nur die JRE.
Kevin Workman

Es war ein Computer eines Freundes - etwas über die Installation von Befehlszeilentools. Ich werde es noch einmal kommentieren, wenn ich die Gelegenheit habe, es erneut zu inspizieren.
PopKernel

Es hört sich so an, als würden Sie darüber sprechen, sicherzustellen, dass Java auf Ihrem Weg ist, aber das ist nur eine Vermutung. In beiden Fällen benötigen Sie nur die JRE, um Java-Programme auszuführen. Sie benötigen das JDK, um sie zu kompilieren.
Kevin Workman

Nur wenige Java-Programme benötigen ein JDK, IDEs, Servlet-Container wie Tomcat, um JSPs und einige andere zu kompilieren. Welche Art von Anwendung hat das Problem?
Arne Burmeister

Antworten:


159

Sie können das Terminal öffnen und einfach eingeben

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

Dies sollte Ihnen die auf dem System installierte Java-Version anzeigen (vorausgesetzt, Sie haben den Pfad des Java in der Systemumgebung festgelegt).

Und wenn nicht, fügen Sie es über hinzu

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

und wenn Sie sich nicht sicher sind, ob Sie Java überhaupt auf Ihrem System haben, verwenden Sie es einfach findim Terminal

dh find / -name "java"


1
@MaciejCygan, Warum zeigt mein JAVA_HOME auf eine JRE anstelle eines JDK?
Pacerier

@ Pacerier Warum? Ich weiß das nicht sicher lol!. Vielleicht haben Sie JDK nicht installiert? Laufen Windows oder Linux?
Maciej Cygan

@ MaciejCygan, ich benutze Windows. Ja, ich habe auch ein JDK installiert.
Pacerier

@Pacerier Sie können einen Eintrag bearbeiten / oder vornehmen, wenn keiner gefunden wurde - innerhalb Ihrer Umgebungsvariablen.
Maciej Cygan

@ MaciejCygan, ja, aber warum zeigt mein JAVA_HOME auf eine JRE anstelle eines JDK?
Pacerier

18

Normalerweise enthält eine JDK-Installation Javac in den Umgebungspfadvariablen. Wenn Sie also im Pfad nach Javac suchen, ist dies ein guter Indikator dafür, dass Sie einen JDK installiert haben.


3
Mir ist klar, dass das OP nach einem Mac gefragt hat, daher kann es dort anders sein. Für Windows scheint dieser Test jedoch nicht zuverlässig zu sein. Ich habe es gerade überprüft und ich habe es NICHT javacin meinem Pfad, aber ich habe ein JDK installiert. (In meinem Fall wird auf mein JAVA_HOME verwiesen C:\Program Files\Java\jdk1.8.0_45)
kmote

Ja, Sie haben Recht, denn Javac befindet sich tatsächlich in% JAVA_HOME% \ bin
Hamed

6

@ maciej-cygan hat den Vorgang jedoch gut beschrieben, um Ihren Java-Pfad zu finden:

$ which java

Es gibt Ihnen den Pfad der javaBinärdatei, die eine verknüpfte Datei im /usr/binVerzeichnis ist. Nächster:

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

Finden Sie den spitzen Ort, der (für mich) wie folgt lautet:

Geben Sie hier die Bildbeschreibung ein dann cdzum angegebenen Verzeichnis, um das echte Home-Verzeichnis für Java zu finden. Nächster:

$ ls -la | grep java

Das ist in diesem Fall wie folgt:

Geben Sie hier die Bildbeschreibung ein

Wie auf dem Screenshot zu sehen ist, ist mein Java-Ausgangsverzeichnis /usr/lib/jvm/java-11-openjdk-amd64. So dementsprechend muss ich JAVA_HOME auf meine bash Profil hinzuzufügen ( .bashrc, .bash_profileusw. auf Ihrem Betriebssystem abhängig) wie folgt:

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

Bitte schön!



0

Eine generische, reine Java-Lösung.

Für Windows und MacOS kann (meistens) Folgendes abgeleitet werden ...

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

Allerdings ... unter Linux ist dies nicht so zuverlässig ... Zum Beispiel ...

  • Viele JREs unter Linux enthalten openjdk den Pfad
  • Es gibt keine Garantie dafür, dass die JRE kein JDK enthält.

Ein ausfallsichererer Ansatz besteht also darin, die Existenz der javacausführbaren Datei zu überprüfen .

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

Warnung: Dies schlägt weiterhin für JRE + JDK-Combos fehl, die die JREs meldensun.boot.library.path zwischen JRE und JDK identisch sind. Zum Beispiel schlägt Fedoras JDK fehl (oder wird bestanden, je nachdem, wie Sie es betrachten), wenn der obige Code ausgeführt wird. Weitere Informationen finden Sie unten unter Unit-Tests ...

Unit Tests:

# 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

Der betreffende Computer ist ein Mac.

Eine reine MacOS-Lösung:

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

Wo 1.8+ ist Java 1.8 oder höher?

Leider stellt der java_homeHelfer nicht den richtigen Rückkehrcode ein, sodass zum Überprüfen auf Fehler das Analysieren der Ausgabe erforderlich ist (z2>&1 |grep -v "Unable" ), die je nach Gebietsschema variiert.

Beachten Sie, dass Java möglicherweise auch in vorhanden ist /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin, aber zum Zeitpunkt des Schreibens ist mir keine JRE bekannt, die dort installiert wird und ebenfalls enthält javac.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.