Pesquisa de site

Como encontrar seu Java Home ao executar várias versões


Aproveite ao máximo a flexibilidade do Java aprendendo como orientar os aplicativos para a versão correta.

Quando você instala o Java, faz parte do trabalho do instalador informar ao seu sistema onde encontrar a linguagem correta quando necessário. É por isso que você é capaz de executar aplicativos Java – na verdade, às vezes você pode executar aplicativos Java sem nunca perceber em qual linguagem eles foram escritos.

Simplificando, simplesmente funciona, assim como quando você instala o Python para executar um aplicativo Python, C para executar um aplicativo escrito em C e assim por diante.

Mas o que acontece quando você instala mais de uma versão do Java no seu sistema? Nesse caso, você terá que assumir a responsabilidade extra de entender onde está localizado o JAVA_HOME de cada versão.

A maneira mais fácil de resolver esse problema é usar o SDKMan. No entanto, se você não tiver o SDKMan disponível, será necessário fazer isso manualmente.

Por que você pode querer múltiplas versões de Java

Existem alguns motivos pelos quais você pode querer mais de uma versão do Java em seu computador.

  • As linguagens de programação progridem em um ritmo, enquanto um aplicativo pode se desenvolver em um ritmo diferente. É possível que Java (a linguagem) aumente seu número de versão enquanto seu aplicativo favorito permanece com uma versão mais antiga. Se você tiver dois aplicativos obrigatórios, cada um usando uma versão diferente do Java, talvez você queira instalar ambos.

  • Os desenvolvedores trabalham em muitos projetos diferentes, alguns dos quais podem usar uma versão antiga de suporte de longo prazo (LTS) do Java, enquanto outros usam a versão mais recente.

  • Você pode estar em um sistema para o qual não tem permissão para instalar o Java no nível do sistema. Em vez disso, você pode executar o Java a partir do seu diretório inicial, mas isso às vezes significa que você precisa apontar os aplicativos para esse local de instalação fora do padrão.

A variável JAVA_HOME

É perfeitamente aceitável ter mais de uma versão do Java instalada, mas os aplicativos podem não saber onde encontrar a versão necessária.

Normalmente, um aplicativo usa apenas o que você definiu como tempo de execução Java padrão. Isso é algo que você pode não ter definido. Dependendo de qual distribuição Linux você executa e do método usado para instalar o Java, o padrão do sistema pode ser a primeira versão do Java instalada ou a mais recente.

Independentemente de qual seja o seu padrão, se você tentar iniciar um aplicativo e receber um erro sobre a versão do Java que está usando, mesmo sabendo que tem a versão correta instalada em algum lugar do seu sistema, você pode substituir manualmente a configuração.

Os aplicativos podem derivar a localização do Java a partir das variáveis de ambiente da sua sessão atual.

Primeiro, dê uma olhada no que JAVA_HOME está definido atualmente, se houver alguma coisa:

$ echo $JAVA_HOME

Se houver saída, então seu computador está mantendo uma variável JAVA_HOME. Se não houver saída, seu computador não possui essa variável definida. Isso não significa necessariamente que seu computador não tenha Java inicial, apenas significa que nada se preocupou em configurá-lo ainda.

Encontre a versão certa

Antes de definir JAVA_HOME, você precisa saber qual Java deseja usar. Qual Java você precisa usar depende do aplicativo que você está tentando executar. Se um aplicativo exigir a execução do Java 8, você precisará apontá-lo para o diretório bin que contém o Java 8. Se um aplicativo exigir a execução do Java 17, será necessário apontá-lo para o diretório bin diretório contendo Java 17.

Você pode encontrar sua versão padrão atual do Java com a opção -version. Inicie um terminal e digite este comando (omita o prompt de comando $):

$ java -version

Encontre o local certo em um gerenciador de pacotes

Agora você precisa saber onde está localizada a versão do Java que deseja usar.

Se você instalou o Java por meio de um gerenciador de pacotes, poderá consultar seu gerenciador de pacotes para obter uma lista de arquivos. Isso informa quais e onde os arquivos foram instalados com esse pacote.

Por exemplo, no Fedora, CentOS ou Mageia, você pode listar todos os pacotes instalados e grep para ver apenas os pacotes que contêm a string java:

$ dnf list installed | grep java

Para uma saída ainda mais limpa, use awk:

$ dnf list installed | awk --field-separator=' ' '/java/{print $1;}'
java-1.8.0-openjdk.x86_64
java-1.8.0-openjdk-devel.x86_64
java-1.8.0-openjdk-headless.x86_64
java-11-openjdk.x86_64
java-11-openjdk-devel.x86_64
java-11-openjdk-headless.x86_64
java-11-openjdk-src.x86_64
javapackages-filesystem.noarch
javapackages-tools.noarch
tzdata-java.noarch

Suponha que você precise de informações sobre Java 8 (versão 1.8).
Você pode ver cada arquivo nos pacotes Java 8 usando o comando rpm:

$ rpm --query --all --list \
java-1.8.0-openjdk* | grep bin/java$
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/jre/bin/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/bin/java

Você pode obter mais de um resultado, mas observe cuidadosamente os caminhos dos arquivos. Geralmente, você deseja apenas o executável Java no diretório bin principal de sua distribuição Java.

Neste exemplo, o caminho para Java 8 é:

 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/bin

Se você usar um gerenciador de pacotes diferente, os comandos serão diferentes, mas o objetivo permanecerá o mesmo. Consulte a documentação do seu gerenciador de pacotes para obter detalhes.

Encontre o local certo em uma instalação manual

Se você instalou o Java manualmente a partir de um arquivo .tar ("tarball"), seu gerenciador de pacotes não terá nenhum registro dele. Esperamos que você saiba onde colocá-lo, então encontrar o caminho para seu JAVA_HOME é tão simples quanto listar o caminho absoluto para seu diretório bin.

Veja como confirmo que o diretório que acho que deveria existir de fato existe:

$ file /opt/jdk-1.8.0/bin

Definir JAVA_HOME temporariamente

Agora você sabe a localização do JAVA_HOME desejado.

Para definir uma variável JAVA_HOME temporariamente, você pode preceder o comando que deseja executar com a configuração da variável. Por exemplo, suponha que você esteja em um sistema com Java 8 e Java 11 instalados. O Java 8 foi instalado originalmente, mas você baixou o Java 11 porque um novo aplicativo interessante que você deseja experimentar exige isso.

Variáveis de ambiente colocadas antes do comando que você está executando são herdadas pelo comando:

$ JAVA_HOME=/opt/jdk-1.8.0/bin coolNewApp

Defina JAVA_HOME permanentemente com o comando alternativo

Para definir uma nova versão Java padrão permanentemente, use o comando alternatives. O comando alternatives analisa os aplicativos instalados em seu sistema Linux e permite escolher qual versão usar. Algumas distribuições, como o Slackware, não fornecem um comando alternatives, então você deve usar o método de instalação local.

No Fedora, CentOS, Mageia e distribuições similares, o comando é alternatives.

No Debian e Ubuntu e similares, o comando é update-alternatives.

Para obter uma lista de versões disponíveis de um aplicativo atualmente instalado em seu sistema Fedora:

$ alternatives --list

No Debian, você deve especificar o aplicativo para o qual deseja alternativas:

$ update-alternatives --list java

Para escolher qual versão você deseja tornar o sistema padrão no Fedora e sistemas similares:

$ sudo alternatives --config java

Em sistemas baseados em Debian:

$ sudo updates-alternatives --config java

Você pode alterar a versão padrão do Java conforme necessário, com base no aplicativo que deseja executar.

Escolha seu Java

Normalmente, você não precisa se preocupar com a confusão dos aplicativos ao usar Java, mas é um benefício do Java permitir que diferentes versões sejam instaladas ao mesmo tempo. Graças a esse recurso, você pode executar até mesmo software antigo que não foi atualizado para a versão mais recente do Java, enquanto executa os aplicativos Java mais recentes.

Porém, com essa flexibilidade vem a responsabilidade de entender como orientar os aplicativos para a versão correta. Agora você sabe como.

Se esse método parecer muito trabalhoso, considere usar SDKMan.

Artigos relacionados: