Comment savoir si JRE ou JDK est installé

134

J'ai un ordinateur sur lequel j'ai installé JDK intentionnellement. J'ai un autre ordinateur avec JRE, pour, entre autres, des tests. Cependant, lorsque j'ai eu une application Java fonctionnant sur cet ordinateur, puis que je l'ai essayée sur un autre, il s'est plaint que JDK était nécessaire. Comment puis-je vérifier si JDK a été installé d'une manière ou d'une autre sur mon système? Remarque: l'ordinateur en question est un Mac.

PopKernel
la source
1
Pouvez-vous publier le texte intégral de l'erreur, y compris comment vous essayez de l'exécuter? Vous n'avez pas besoin du JDK pour exécuter un programme Java, juste le JRE.
Kevin Workman
C'était un ordinateur d'amis - quelque chose sur l'installation d'outils de ligne de commande. Je ferai un nouveau commentaire lorsque j'aurai l'occasion de l'inspecter à nouveau.
PopKernel
Il semble que vous parliez de vous assurer que Java est sur votre chemin, mais ce n'est qu'une supposition. Dans tous les cas, vous n'avez besoin que du JRE pour exécuter les programmes Java. Vous avez besoin du JDK pour les compiler.
Kevin Workman
Seuls quelques programmes Java ont besoin d'un JDK, des IDE, des conteneurs de servlet comme tomcat pour compiler des JSP et quelques autres. Quel type d'application pose le problème?
Arne Burmeister

Réponses:

159

Vous pouvez ouvrir le terminal et taper simplement

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

cela devrait vous montrer la version de java installée sur le système (en supposant que vous ayez défini le chemin de java dans l'environnement système).

Et si vous ne l'avez pas fait, ajoutez-le via

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

et si vous ne savez pas si vous avez java sur votre système, utilisez simplement finddans le terminal

c'est à dire find / -name "java"

Maciej Cygan
la source
1
@MaciejCygan, Pourquoi mon JAVA_HOME pointe-t-il vers un JRE au lieu d'un JDK?
Pacerier
@Pacerier Pourquoi ?? je ne sais pas que c'est sûr lol !. Peut-être n'avez-vous pas installé JDK? Exécution de Windows ou Linux ??
Maciej Cygan
@MaciejCygan, j'utilise Windows. Oui, j'ai aussi un JDK installé.
Pacerier du
@Pacerier Vous pouvez modifier / ou faire une entrée si aucune n'est trouvée - dans vos variables d'environnement.
Maciej Cygan
@MaciejCygan, oui, mais pourquoi mon JAVA_HOME pointe-t-il vers un JRE au lieu d'un JDK?
Pacerier
18

Normalement, une installation jdk a javac dans les variables de chemin d'environnement ... donc si vous vérifiez javac dans le chemin, c'est à peu près un bon indicateur que vous avez installé un jdk.

Shiraaz.M
la source
3
Je me rends compte que l'OP posait des questions sur un Mac, donc ça peut être différent là-bas. Mais comme pour Windows, ce test ne semble pas fiable. Je viens de vérifier, et je n'ai PAS javacsur mon chemin, mais j'ai un jdk installé. (Dans mon cas, mon JAVA_HOME est pointé vers C:\Program Files\Java\jdk1.8.0_45)
kmote
Ouais, vous avez raison car javac est en fait situé dans% JAVA_HOME% \ bin
Hamed le
6

@ maciej-cygan a bien décrit le processus, cependant afin de trouver votre chemin java:

$ which java

il vous donne le chemin du javafichier binaire qui est un fichier lié dans le /usr/binrépertoire. suivant:

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

trouvez l'emplacement pointé qui est quelque chose comme suit (pour moi):

entrez la description de l'image ici puis cdvers le répertoire pointé pour trouver le véritable répertoire personnel de Java. suivant:

$ ls -la | grep java

qui est comme suit dans ce cas:

entrez la description de l'image ici

donc comme il est évident dans la capture d'écran, mon répertoire de base Java est /usr/lib/jvm/java-11-openjdk-amd64. Donc , en conséquence , je dois ajouter JAVA_HOME à mon profil bash ( .bashrc, .bash_profile, etc. en fonction de votre système d' exploitation) comme ci - dessous:

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

Voici!

Shayan Amani
la source
0

Une solution Java générique et pure.

Pour Windows et MacOS, les éléments suivants peuvent être déduits (la plupart du temps) ...

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

Cependant ... sous Linux, ce n'est pas aussi fiable ... Par exemple ...

  • De nombreux JRE sous Linux contiennent openjdkle chemin
  • Il n'y a aucune garantie que le JRE ne contienne pas également un JDK.

Une approche plus sûre consiste donc à vérifier l'existence de l' javacexécutable.

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

Attention: cela échouera toujours pour les combos JRE + JDK qui signalent lessun.boot.library.path identique entre le JRE et le JDK. Par exemple, le JDK de Fedora échouera (ou passera selon la façon dont vous le regardez) lorsque le code ci-dessus est exécuté. Voir les tests unitaires ci-dessous pour plus d'informations ...

Tests unitaires:

# 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
la source
0

l'ordinateur en question est un Mac.

Une solution uniquement macOS:

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

1.8+est Java 1.8 ou supérieur.

Malheureusement, l' java_homeassistant ne définit pas le bon code de retour, donc la vérification de l'échec nécessite d'analyser la sortie (par exemple 2>&1 |grep -v "Unable") qui varie en fonction de la locale.

Notez que Java peut également exister dans /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin, mais au moment d'écrire ceci, je ne suis pas au courant d'un JRE qui s'y installe et qui contient javacégalement.

tresf
la source