Como determinar o JAVA_HOME no Debian / Ubuntu?

95

No Ubuntu, é possível ter várias JVMs ao mesmo tempo. O padrão é selecionado com update-alternatives. Mas isso não define a JAVA_HOMEvariável de ambiente, devido a uma política debian .

Estou escrevendo um script do iniciador (bash), que inicia um aplicativo java. Este aplicativo java precisa da JAVA_HOMEvariável de ambiente. Então, como obter o caminho da JVM atualmente selecionado por update-alternatives?

Witek
fonte

Respostas:

137

Para o JRE, algo como isto deve funcionar:

JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
danadam
fonte
17
Eu precisava da casa do JDK em vez do JRE, mas obtive isso usando: JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: bin / javac ::") Obrigado!
Witek
quando tentei o comando echo $(readlink -f /usr/bin/java | sed "s:bin/java::"), a saída foi /usr/lib/jvm/java-7-oracle/jre/e não #/usr/lib/jvm/java-7-oracle/
Sumit Ramteke
O código fornecido no rsaddey funciona corretamente
Sumit Ramteke
43

A solução da danadam pode ser facilmente adotada para recuperar o caminho do JDK (ou seja, não JRE), conforme necessário:

JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
  • Procura pelo compilador Java javac (em vez de java) incluído no JDK (mas não no JRE).
  • Não possui / / (retirado por sed s: / bin ... em vez de s: bin ...)
rsaddey
fonte
12

export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/java)))

Na .bashrcera útil para mim.

David
fonte
9

Então, você está dizendo que esse comando não faz nada para você?

sudo update-alternatives --config java 
djangofan
fonte
2
Isso deve configurar seu JAVA_HOME? Descobri que update-java-alternative é a melhor maneira de atualizar o Java, pois o update-alternative não atualiza todas as alternativas relacionadas ao Java. Veja askubuntu.com/questions/141791
James McMahon
É verdade, mas eu encontrei instâncias do Linux que possuíam alternativas de atualização, mas não tinham alternativas de atualização de java instaladas.
djangofan
3

Eu instalei o java com

sudo apt-get install openjdk-7-jre-headless

e depois encontrar a localização

ls -al /etc/alternatives/java
prule
fonte
2

Como uma extensão dos danadams, responda:

Primeiro, instale o 2º Java JRE como a 3ª opção java, com prioridade "3":

sudo alternatives --install /usr/lib/jvm/jre jre /opt/IBM/java/jre/bin/java 3

Em seguida, você pode listá-los:

update-alternatives --list java

Você pode definir a alternativa manualmente, usando o seguinte:

sudo alternatives --config java /opt/IBM/java/jre/bin/java

Em seguida, seu script pode configurá-lo rapidamente, da seguinte maneira:

sudo alternatives --set java /opt/IBM/java/jre/bin/java
JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

Isso ilustra melhor o que o comando 'sed' está fazendo. Embora você ainda precise definir os links para javaw e javac, etc, cada um feito separadamente.

djangofan
fonte
1

Há um tempo atrás, criei um tutorial no fórum Ubuntu sobre como instalar o JRE / JDK mais recente no site Java. Ele também aborda como ativá-lo em todo o sistema, adicionando o local JRE / JDK à variável PATH. Se desejar, você também pode adicionar JAVA_HOME ao script, mencionado no final do tópico.

Confira: http://ubuntuforums.org/showthread.php?t=1437100

EarthMind
fonte
1

Se o java estiver configurado com update-alternativesou foi adicionado à sua variável PATH manualmente, não "/usr/bin/java"será necessário codificar . Eu uso esta solução no meu .bashrc:

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

Freddy
fonte