Como definir JAVA_HOME no Linux para todos os usuários


185

Eu sou novo no sistema Linux e parece haver muitas pastas Java.

java -version me dá:

  • versão java "1.7.0_55"
  • Ambiente de tempo de execução OpenJDK (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
  • VM do servidor OpenJDK de 64 bits (compilação 24.51-b03, modo misto)

Quando estou tentando criar um projeto Maven, estou recebendo um erro:

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

Você poderia me dizer quais arquivos eu preciso modificar para o usuário root e não root e onde exatamente está o java?

Respostas:


352
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    Prefira o sudo se estiver logado como usuário não privilegiado, ie. sudo vim

  3. Pressione 'i' para entrar no modo de inserção
  4. adicionar:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
  5. efetue logout e logon novamente, reinicie ou use source /etc/profilepara aplicar alterações imediatamente no seu shell atual

29
não se esqueça de excluir as aspas duplas e recriá-las no teclado, porque apenas copiar e colar pode criar problemas.
— Sunil Kumar

12
@rbaleksandar de que alguns aplicativos dependem JAVA_HOME, não prejudica configurá-lo também.
— raffian

2
O IntelliJ é um aplicativo desse tipo - e não um aplicativo menor.
— Pete

12
Você precisa executar source /etc/profilepara que as alterações entrem em vigor imediatamente também!
— Mohamed Taher Alrefaie

1
Isso me indicou a direção certa. Na verdade, havia um passado /etc/profile.d/jdk.shflutuando no meu sistema.
— Hermann

109

Para todos os usuários, eu recomendaria colocar a seguinte linha em /etc/profile

export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

Isso será atualizado dinamicamente e funciona bem com o sistema de alternativas . Observe, porém, que a atualização ocorrerá apenas em um novo shell de logon.


10
para estar em conformidade com o simples uso de JRE (mesmo sem cabeça) export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")- observe que eu uso apenas java, nãojavac
— Roman Kruglov

@occulta Pelo menos o Maven espera que JAVA_HOME aponte para um JDK e o use para localizar o compilador java.
— Eero Aaltonen

1
Voto positivo readlinke atualização / atualização de solução compatível, mesmo que esse seja um encadeamento de 5 anos. Eu só recomendo não editar o / etc / profile, mas coloque sua exportação dentro de um arquivo personalizado, por exemplo /etc/profile.d/java_environment.sh, talvez seja necessário chmod +x java_environment.she reinicie.
— ChristophS

Perfeito. Melhor do que minha dirnamesolução desajeitada . Se você é como eu e quer entender o que está acontecendo aqui, é uma simples substituição do texto correspondente da entrada por uma string vazia. O caractere "padrão" para substituições é o /, mas enquanto você for consistente, poderá substituí-lo /por qualquer coisa. Nesse caso, são dois pontos, como usamos /para separadores de caminho.
— Ungeheuer

35

Você pode usar / etc / profile ou melhor, um arquivo como /etc/profile.d/jdk_home.sh

export JAVA_HOME=/usr/java/jdk1.7.0_05/

Você deve se lembrar que este arquivo é carregado apenas com novas shells de login. Então, após o bash -l ou uma nova sessão do gnome e que ele não muda com as novas versões do Java.


1
pelo menos no meu linux (raspbian), / etc / profile será fonte /etc/profile.d/*.shpara que o seu arquivo precisa ser chamado jdk_home.shpor isso, recebe origem
— hilikus

Obrigado @Hilikus :-) Eu mudei de acordo.
— flob

2
Obrigado. eu fiz uma mistura de seu e @ resposta de Eero para o melhor dos dois mundos;)
— hilikus

1
Esta é a melhor resposta
— Jacob

/etc/profile.d/jdk_home.shé a resposta muito mais limpa, pelo menos para o Ubuntu , já /etc/profileestá cheia de muita lógica. Será que não parece sensato para adicionar mais para ele ...
— Ng Sek Longo

30

Nenhuma das outras respostas estava "aderindo" para mim no RHEL 7, mesmo configurando JAVA_HOMEe PATHdiretamente /etc/profileou ~/.bash_profilenão funcionaria. Cada vez que eu tentava verificar se JAVA_HOMEestava definido, ele fica em branco:

$ echo $JAVA_HOME
    (<-- no output)

O que eu tive que fazer foi configurar um script em /etc/profile.d/jdk_home.sh:

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

Inicialmente, negligenciei a primeira linha (the #!/bin/sh) e ela não funcionará sem ela.

Agora está funcionando:

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/

Eu tive a mesma experiência no RHEL 7. Removai as exportações do ~ / .bash_profile e usei essa abordagem.
— xpagesbeast

#! / bin / sh não é necessário no seu jdk_home.sh. uma vez que você fez a configuração, certifique-se de logout e login novamente
— kuhajeyan

12

É muito fácil definir um caminho no Linux. Faça o seguinte:

Etapa 1 Abra o terminal e digite sudo gedit .bashrc

Etapa 2 Ele solicitará sua senha. Depois de digitar a senha, ele abrirá o arquivo bash. Então vá para o final e digite abaixo

etapa 3

   export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
   export PATH=$PATH:$JAVA_HOME/bin

passo-4 Em seguida, salve o arquivo e saia do arquivo

Acima é para um único usuário. Para todos os usuários, você deve seguir as etapas abaixo

Passo 1 gedit /etc/profile

Passo 2 export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

Etapa 3 export PATH=$PATH:$JAVA_HOME/bin

Espero que isto ajude. Obrigado!


2
esta resposta define apenas para o usuário atual.
— Manuel Manhart 29/11

Obrigado @ickyrr
— PyDevSRS

7

Fazendo o que a Oracle faz (como ex-funcionário da Sun, não posso me acostumar com isso)

ln -s latestJavaRelease / usr / java / default
Onde latestJavaRelease é a versão que você deseja usar

exporte JAVA_HOME = / usr / java / default


6

A resposta é dada posts anteriores é válido. Mas nenhuma resposta está completa com relação a:

  1. Alterar o / etc / profile não é recomendado simplesmente por causa do motivo (conforme declarado em / etc / profile):
  • NÃO é uma boa ideia alterar esse arquivo, a menos que você saiba o que está fazendo. É muito melhor criar um script de shell custom.sh no /etc/profile.d/ para fazer alterações personalizadas no seu ambiente, pois isso evitará a necessidade de mesclagem em futuras atualizações. *
  1. Portanto, como declarado acima, crie o arquivo /etc/profile.d/custom.sh para alterações personalizadas.

  2. Agora, para manter-se sempre atualizado com as versões mais recentes do Java sendo instaladas, nunca coloque o caminho absoluto; use:

#if fazendo o jdk como java home

exportar JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: / bin / javac ::")

OU

#if fazendo jre como java home

exportar JAVA_HOME = $ (readlink -f / usr / bin / java | sed "s: / bin / java ::")

  1. E lembre-se de ter #! / bin / bash no arquivo custom.sh

4

Copie o caminho do arquivo bin que você instalou

YOUR PATH

abra o terminal e edite o arquivo do ambiente digitando o seguinte comando,

sudo nano /etc/environment

Nesse arquivo, adicione a seguinte linha (substituindo YOUR_PATHpelo caminho recém-copiado):

JAVA_HOME="YOUR_PATH"

Isso deve ser suficiente para definir a variável de ambiente. Agora recarregue este arquivo:

source /etc/environment

agora teste-o executando:

echo $JAVA_HOME

3
olny afeta a sessão atual do terminal
— Fatih Türker 15/10/19

@ FatihTürker Reinicie o seu PC
— Jack Giffin

Para mim usando jdk11, YOUR_PATH é/usr/lib/jvm/default-java/
— Jack Giffin

2

No Linux, adiciono esta linha ao meu ~ / .profile:

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)

2
Parece uma resposta potencialmente correta, mas você poderia explicar por que funciona, ou seja, o que faz e qual é o problema do OP? Além disso, você diz "no Linux", mas existem muitas distribuições diferentes do Linux e elas podem não funcionar para todas elas; por favor, adicione para qual distribuição isso funciona.
— Buurman

2

Etapa 1 - verifique a versão java atual "echo $ JAVA_HOME"

Etapa 2 - vim / etc / profile

Etapa 3 - No final do arquivo, você encontrará a exportação JAVA_HOME, precisamos fornecer o novo caminho aqui, verifique se ele não é relativo.

Etapa 4 - Salvar e sair: wq

Etapa 5 - "source / etc / profile /", isso executaria a alteração

Etapa 6 - Novamente, faça um eco $ JAVA_HOME - a mudança teria sido refletida.


2

1 ... Usando o atalho Ctlr+ Alt+ Tpara abrir o terminal

2 ... Execute o comando abaixo:

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ... (Recomendado) Reinicie sua VM / computador. Você pode usar source /etc/sourcese não quiser reiniciar o computador

4 ... Usando o atalho Ctlr+ Alt+ Tpara abrir o terminal

5 ... parcela JAVA_HOME verificada com

echo $JAVA_HOME

Cópia de uma linha do flob , creditada a eles


2
export "JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")" | tee -a /etc/profile && source /etc/profile && echo $JAVA_HOME

1

Provavelmente, é uma boa ideia buscar qualquer perfil que você editar para economizar, tendo que usar um novo login.

ou: source / etc / ou. / etc /

Onde está o perfil que você editou.


1

Enquanto estivermos configurando o JAVA_HOME, deixe-me compartilhar alguns benefícios da configuração do JAVA_HOME ou de qualquer outra variável de ambiente:

1) É fácil atualizar o JDK sem afetar o arquivo de inicialização e configuração do aplicativo, que aponta para JAVA_HOME. você só precisa fazer o download da nova versão e verificar se o seu JAVA_HOME aponta para a nova versão do Java. Esse é o melhor benefício do uso de variáveis ​​ou links de ambiente.

2) A variável JAVA_HOME é curta e concisa, em vez de caminho completo para o diretório de instalação do JDK.

3) A variável JAVA_HOME é a independência da plataforma, ou seja, se seu script de inicialização usa JAVA_HOME, ele pode ser executado no Windows e UNIX sem nenhuma modificação, basta definir JAVA_HOME no respectivo sistema operacional.

Leia mais: http://javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH


1

Este é um script muito simples para resolver o problema

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

E para testar:

echo $JAVA_HOME

1

Postando como resposta, pois não tenho o privilégio de comentar.

Nota : siga a resposta aceita postada por "That Dave Guy".

Após definir as variáveis, defina as permissões apropriadas para o diretório java em que está instalado.

chmod -R 755 /usr/java

1

Todas as etapas operacionais (localização de java, diretório pai, arquivo de edição, ...)

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

Resultado:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

Explicação:

1) Vamos dividir o comando completo em pedaços

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2) Encontre o caminho java no comando java

# $(which java)
"/usr/bin/java"

3) Obter caminho relativo do caminho simbólico

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4) Obter caminho pai de /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5) Obter caminho pai de /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"


0

abra o kafka-run-class.sh com o sudo para escrever

você pode encontrar o kafka-run-class.sh na sua pasta kafka : kafka / bin / kafka-run-class.sh

verifique estas linhas

insira a descrição da imagem aqui

Modifique a variável JAVA na parte else para apontar para o executável java em seu java / bin. como JAVA = "$ JAVA_HOME / java"


0

No / etc / profile, se você abrir, você saberá que NÃO é recomendado escrever nesse arquivo. Em vez disso, crie um script com seus comandos (suponha que test.sh) vá para a pasta /etc/profile.d e coloque test.sh lá. Sempre que você reiniciar a instância, ela será automaticamente chamada por / etc / profile.


-1

Eu uso a linha:

export JAVA_HOME=$(readlink -f $(dirname $(readlink -f $(which java) ))/../)

no meu ~ / .profile, para que ele use a base do diretório java padrão no momento do login. Isto é para bash.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.