Come sapere se è installato JRE o JDK


134

Ho un computer su cui ho installato intenzionalmente JDK. Ho un altro computer con JRE, per, tra le altre cose, testare. Tuttavia, quando ho ottenuto un'applicazione Java funzionante su questo computer, e poi l'ho provato su un altro, si è lamentato del fatto che JDK fosse necessario. Come posso verificare se JDK è stato in qualche modo installato sul mio sistema? Nota: il computer in questione è un Mac.


1
Puoi pubblicare il testo completo dell'errore, incluso il modo in cui stai provando a eseguirlo? Non è necessario JDK per eseguire un programma Java, ma solo JRE.
Kevin Workman,

Era un computer amico - qualcosa sull'installazione di strumenti da riga di comando. Commenterò di nuovo quando avrò la possibilità di ispezionarlo di nuovo.
PopKernel

Sembra che tu stia parlando di assicurarti che Java sia sul tuo percorso, ma è solo una supposizione. Ad ogni modo, è sufficiente JRE per eseguire i programmi Java. È necessario JDK per compilarli.
Kevin Workman,

Solo pochi programmi Java hanno bisogno di un JDK, IDE, contenitori servlet come Tomcat per compilare JSP e alcuni altri. Che tipo di applicazione ha il problema?
Arne Burmeister,

Risposte:


159

Puoi aprire il terminale e semplicemente digitare

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

questo dovrebbe mostrare la versione di Java installata sul sistema (supponendo che tu abbia impostato il percorso di Java nell'ambiente di sistema).

E se non l'hai fatto, aggiungilo via

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

e se non sei sicuro di avere java sul tuo sistema, usa solo findnel terminale

vale a dire find / -name "java"


1
@MaciejCygan, Perché il mio JAVA_HOME punta a un JRE anziché a un JDK?
Pacerier,

@Pacerier Why ?? non lo so per certo lol !. Forse non hai installato JDK? Esecuzione di Windows o Linux ??
Maciej Cygan,

@MaciejCygan, sto usando Windows. Sì, ho installato anche un JDK.
Pacerier,

@Pacerier È possibile modificare / o inserire una voce se non viene trovata - all'interno delle variabili ambientali.
Maciej Cygan,

@MaciejCygan, sì, ma perché il mio JAVA_HOME punta a un JRE anziché a un JDK?
Pacerier,

18

Normalmente un'installazione jdk ha javac nelle variabili del percorso di ambiente ... quindi se controlli javac nel percorso, è praticamente un buon indicatore che hai un jdk installato.


3
Mi rendo conto che l'OP stava chiedendo di un Mac, quindi potrebbe essere diverso lì. Ma per quanto riguarda Windows, questo test non sembra affidabile. Ho appena controllato e NON ho javacpercorso nel mio percorso, ma ho un jdk installato. (Nel mio caso, viene indicato il mio JAVA_HOME C:\Program Files\Java\jdk1.8.0_45)
kmote del

Sì, hai ragione perché javac si trova in% JAVA_HOME% \ bin
Hamed

6

@ maciej-cygan ha descritto bene il processo, tuttavia per trovare il tuo percorso java:

$ which java

ti dà il percorso del javafile binario che è un file collegato nella /usr/bindirectory. Il prossimo:

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

trova la posizione appuntita che è qualcosa come segue (per me):

inserisci qui la descrizione dell'immagine quindi cdnella directory indicata per trovare la home directory reale per Java. Il prossimo:

$ ls -la | grep java

che è come segue in questo caso:

inserisci qui la descrizione dell'immagine

così come è ovvio nello screenshot, la mia directory home Java è /usr/lib/jvm/java-11-openjdk-amd64. Quindi di conseguenza ho bisogno di aggiungere JAVA_HOME al mio profilo bash ( .bashrc, .bash_profile, ecc seconda del sistema operativo) come di seguito:

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

Ecco qui!



0

Una soluzione Java generica e pura.

Per Windows e MacOS, si può dedurre quanto segue (il più delle volte) ...

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

Tuttavia ... su Linux non è così affidabile ... Ad esempio ...

  • Molti JRE su Linux contengono openjdkil percorso
  • Non vi è alcuna garanzia che JRE non contenga anche un JDK.

Quindi un approccio più sicuro è verificare l'esistenza javacdell'eseguibile.

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

Avvertenza: ciò non funzionerà ancora per le combinazioni JRE + JDK che riportano sun.boot.library.pathidenticamente le JRE tra JRE e JDK. Ad esempio, il JDK di Fedora fallirà (o passerà a seconda di come lo guardi) quando viene eseguito il codice sopra. Vedi le unit test di seguito per maggiori informazioni ...

Test unitari:

# 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

il computer in questione è un Mac.

Una soluzione solo per macOS:

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

Dov'è 1.8+Java 1.8 o versioni successive.

Sfortunatamente, l' java_homehelper non imposta il codice di ritorno corretto, quindi il controllo degli errori richiede l'analisi dell'output (ad es. 2>&1 |grep -v "Unable") Che varia in base alle impostazioni locali.

Nota, potrebbe anche esistere Java /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin, ma al momento della stesura di questo, non sono a conoscenza di un JRE che installa lì che contiene javacanche.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.