Como saber se o JRE ou JDK está instalado

134

Eu tenho um computador no qual intencionalmente instalei o JDK. Eu tenho outro computador com o JRE para, entre outras coisas, testar. No entanto, quando recebi um aplicativo java trabalhando neste computador e tentei em outro, ele reclamou que o JDK era necessário. Como posso verificar se o JDK foi instalado de alguma forma no meu sistema? Nota: o computador em questão é um Mac.

PopKernel
fonte
1
Você pode postar o texto completo do erro, incluindo como está tentando executá-lo? Você não precisa do JDK para executar um programa Java, apenas o JRE.
Kevin Workman
Era um computador de amigos - algo sobre a instalação de ferramentas de linha de comando. Vou comentar novamente quando tiver a chance de inspecioná-lo novamente.
PopKernel
Parece que você está falando sobre garantir que o Java esteja no seu caminho, mas isso é apenas um palpite. De qualquer forma, você só precisa do JRE para executar programas Java. Você precisa do JDK para compilá-los.
Kevin Workman
Apenas alguns programas java precisam de um JDK, IDEs, contêineres de servlet como o tomcat para compilar JSPs e alguns outros. Que tipo de aplicativo tem o problema?
Arne Burmeister

Respostas:

159

Você pode abrir o terminal e simplesmente digitar

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

isso deve mostrar a versão do java instalada no sistema (supondo que você tenha definido o caminho do java no ambiente do sistema).

E se você não tiver, adicione-o via

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

e se você não tiver certeza se possui java no seu sistema, use findno terminal

ie find / -name "java"

Maciej Cygan
fonte
1
@MaciejCygan, Por que meu JAVA_HOME está apontando para um JRE em vez de um JDK?
Pacerier 04/12/14
@Pacerier Why ?? Eu não sei com certeza lol !. Talvez você não tenha o JDK instalado? Executando Windows ou Linux?
Maciej Cygan
@MaciejCygan, estou usando o Windows. Sim, também tenho um JDK instalado.
Pacerier 11/12/14
@Pacerier Você pode editar / ou fazer uma entrada, se nenhuma for encontrada - dentro de suas variáveis ​​ambientais.
Maciej Cygan
@MaciejCygan, sim, mas por que meu JAVA_HOME está apontando para um JRE em vez de um JDK?
Pacerier 12/12/14
18

Normalmente, uma instalação do jdk possui o javac nas variáveis ​​do caminho do ambiente ... então, se você verificar o javac no caminho, é um bom indicador de que você tem o jdk instalado.

Shiraaz.M
fonte
3
Sei que o OP estava perguntando sobre um Mac, então pode ser diferente lá. Mas, como no Windows, esse teste não parece confiável. Acabei de verificar e NÃO tenho javacno meu caminho, mas tenho um jdk instalado. (No meu caso, meu JAVA_HOME é pontiaguda para C:\Program Files\Java\jdk1.8.0_45)
kmote
Sim, você está causa certa javac é realmente localizado em% JAVA_HOME% \ bin
Hamed
6

O @ maciej-cygan descreveu bem o processo, no entanto, a fim de encontrar o caminho do java:

$ which java

fornece o caminho do javaarquivo binário, que é um arquivo vinculado no /usr/bindiretório Próximo:

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

encontre o local apontado, que é o seguinte (para mim):

insira a descrição da imagem aqui depois cdpara o diretório apontado para encontrar o diretório inicial real para Java. Próximo:

$ ls -la | grep java

que é o seguinte neste caso:

insira a descrição da imagem aqui

Portanto, como é óbvio na captura de tela, meu diretório inicial Java é /usr/lib/jvm/java-11-openjdk-amd64. Então, nesse sentido eu preciso adicionar JAVA_HOME ao meu perfil bash ( .bashrc, .bash_profile, etc. dependendo do seu OS) como abaixo:

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

Aqui está!

Shayan Amani
fonte
0

de acordo com a documentação JAVA, o JDK deve ser instalado neste caminho:

/Library/Java/JavaVirtualMachines/jdkmajor.minor.macro[_update].jdk

Consulte a parte do JDK de desinstalação em https://docs.oracle.com/javase/8/docs/technotes/guides/install/mac_jdk.html

Portanto, se você conseguir encontrar essa pasta, o JDK será instalado

Yu Liang
fonte
0

Uma solução Java pura e genérica.

Para Windows e MacOS, pode-se inferir o seguinte (na maioria das vezes) ...

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

No entanto ... no Linux, isso não é tão confiável ... Por exemplo ...

  • Muitos JREs no Linux contêm openjdko caminho
  • Não há garantia de que o JRE também não contenha um JDK.

Portanto, uma abordagem mais à prova de falhas é verificar a existência do javacexecutável.

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

Aviso: Isso ainda falhará nos combos do JRE + JDK que relatam os JREs de forma sun.boot.library.pathidêntica entre o JRE e o JDK. Por exemplo, o JDK do Fedora falhará (ou passará dependendo de como você o vê) quando o código acima é executado. Veja os testes de unidade abaixo para obter mais informações ...

Testes unitários:

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

o computador em questão é um Mac.

Uma solução apenas para macOS:

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

Onde 1.8+está o Java 1.8 ou superior.

Infelizmente, o java_homeauxiliar não define o código de retorno adequado; portanto, verificar a falha exige a análise da saída (por exemplo 2>&1 |grep -v "Unable"), que varia de acordo com a localidade.

Observe que o Java também pode existir /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin, mas no momento em que escrevo isso, não conheço um JRE que o instale lá e que também contém javac.

tresf
fonte