Cómo saber si JRE o JDK está instalado

134

Tengo una computadora en la que instalé intencionalmente JDK. Tengo otra computadora con JRE, para, entre otras cosas, probar. Sin embargo, cuando obtuve una aplicación Java trabajando en esta computadora, y luego la probé en otra, se quejó de que se requería JDK. ¿Cómo puedo verificar si JDK se instaló de alguna manera en mi sistema? Nota: la computadora en cuestión es una Mac.

PopKernel
fuente
1
¿Puede publicar el texto completo del error, incluida la forma en que intenta ejecutarlo? No necesita el JDK para ejecutar un programa Java, solo el JRE.
Kevin Workman
Era una computadora de amigos, algo sobre la instalación de herramientas de línea de comandos. Volveré a comentar cuando tenga la oportunidad de inspeccionarlo nuevamente.
PopKernel
Parece que podría estar hablando de asegurarse de que Java esté en su camino, pero eso es solo una suposición. De cualquier manera, solo necesita el JRE para ejecutar programas Java. Necesita el JDK para compilarlos.
Kevin Workman
Solo unos pocos programas de Java necesitan un JDK, IDE, contenedores de servlets como tomcat para compilar JSP y algunos otros. ¿Qué tipo de aplicación tiene el problema?
Arne Burmeister

Respuestas:

159

Puede abrir la terminal y simplemente escribir

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

Esto debería mostrarle la versión de Java instalada en el sistema (suponiendo que haya configurado la ruta de Java en el entorno del sistema).

Y si no lo ha hecho, agréguelo a través de

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

y si no está seguro si tiene java en su sistema, simplemente use finden la terminal

es decir find / -name "java"

Maciej Cygan
fuente
1
@MaciejCygan, ¿por qué mi JAVA_HOME apunta a un JRE en lugar de un JDK?
Pacerier
@Pacerier ¿Por qué? No lo sé con seguridad jajaja !. ¿Quizás no tienes JDK instalado? Ejecutando Windows o Linux?
Maciej Cygan
@MaciejCygan, estoy usando Windows. Sí, también tengo un JDK instalado.
Pacerier
@Pacerier Puede editar / o hacer una entrada si no encuentra ninguna - dentro de sus variables ambientales.
Maciej Cygan
@MaciejCygan, sí, pero ¿por qué mi JAVA_HOME apunta a un JRE en lugar de un JDK?
Pacerier
18

Normalmente, una instalación de jdk tiene javac en las variables de ruta del entorno ... así que si verifica javac en la ruta, eso es un buen indicador de que tiene un jdk instalado.

Shiraaz.M
fuente
3
Me doy cuenta de que el OP estaba preguntando acerca de una Mac, por lo que puede ser diferente allí. Pero en cuanto a Windows, esta prueba no parece confiable. Acabo de comprobar y NO tengo javacen mi camino, pero sí tengo un jdk instalado. (En mi caso, mi JAVA_HOME es señalado C:\Program Files\Java\jdk1.8.0_45)
kmote
Sí, tienes razón porque javac se encuentra en% JAVA_HOME% \ bin
Hamed
6

@ maciej-cygan describió bien el proceso, sin embargo, para encontrar su ruta de Java:

$ which java

le da la ruta del javaarchivo binario que es un archivo vinculado en el /usr/bindirectorio. siguiente:

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

encuentre la ubicación puntiaguda que es algo de la siguiente manera (para mí):

ingrese la descripción de la imagen aquí luego cdal directorio señalado para encontrar el directorio de inicio real para Java. siguiente:

$ ls -la | grep java

que es como sigue en este caso:

ingrese la descripción de la imagen aquí

así como es obvio en la captura de pantalla, mi directorio de inicio de Java es /usr/lib/jvm/java-11-openjdk-amd64. Así que en consecuencia tengo que añadir JAVA_HOME al perfil de bash ( .bashrc, .bash_profile, etc., dependiendo de su sistema operativo), como a continuación:

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

¡Aqui tienes!

Shayan Amani
fuente
0

Una solución Java pura genérica.

Para Windows y MacOS, se puede inferir lo siguiente (la mayoría de las veces) ...

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

Sin embargo ... en Linux esto no es tan confiable ... Por ejemplo ...

  • Muchos JRE en Linux contienen openjdkla ruta
  • No hay garantía de que el JRE no contenga también un JDK.

Entonces, un enfoque más seguro es verificar la existencia del javacejecutable.

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

Advertencia: Esto seguirá fallando para los combos JRE + JDK que informan los JREsun.boot.library.path idéntica entre JRE y JDK. Por ejemplo, el JDK de Fedora fallará (o pasará dependiendo de cómo lo mire) cuando se ejecute el código anterior. Consulte las pruebas unitarias a continuación para obtener más información ...

Pruebas unitarias:

# 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
fuente
0

La computadora en cuestión es una Mac.

Una solución solo para macOS:

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

¿Dónde 1.8+está Java 1.8 o superior?

Desafortunadamente, el java_homeasistente no establece el código de retorno adecuado, por lo que la comprobación de fallas requiere analizar la salida (por ejemplo 2>&1 |grep -v "Unable"), que varía según el entorno local.

Tenga en cuenta que Java también puede existir /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin, pero al momento de escribir esto, no conozco un JRE que se instale allí que también contenga javac.

tresf
fuente