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?

Bosco
fonte

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
Aquele Dave Guy
fonte
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.

Eero Aaltonen
fonte
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.

flob
fonte
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/
Kyle Falconer
fonte
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!

PyDevSRS
fonte
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

Steve S
fonte
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
alok ailawadi
fonte
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
VirangaMahesh
fonte
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)
Emanuel Oliveira
fonte
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.

swapnil shashank
fonte
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

Ng Sek Long
fonte
2
export "JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")" | tee -a /etc/profile && source /etc/profile && echo $JAVA_HOME
Dashrath Mundkar
fonte
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.

Bryant Bernstein
fonte
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

convidado
fonte
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
Dylan Breugne
fonte
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
Van Peer
fonte
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"
ahmet
fonte
0

Use SDKMAN sdkman.io para alternar entre btw. seu SDK.

Ele define o JAVA_HOME para você.

Stefan Höltker
fonte
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"

Ashish Verma
fonte
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.

Não ha
fonte
-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.

darkhipo
fonte