Qual é a diferença entre JAVA_HOME e update-alternative?

12

Eu tenho tentado descobrir a melhor maneira de executar o OpenJDK Java Runtime como Java padrão para minha caixa do Fedora e usar o Oracle JDK 6 para desenvolvimento Android, nomeadamente para executar o Android SDK Manager, Android Studio e Eclipse do Android Bundle.

Eu instalei o OpenJDK Java Runtime a partir do repositório do Fedora, que possui alternativas de configuração a seguir.

[donnie@fedora ~]$ alternatives --list | grep java
jre_openjdk             auto    /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre
jre_1.7.0               auto    /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre
java                    auto    /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre/bin/java
libjavaplugin.so.x86_64 auto    /usr/lib64/IcedTeaPlugin.so

Eu instalei o Oracle JDK 6 usando o rpm fornecido pelo Oracle.

Eu poderia fazer com que o Android Bundle e o Studio utilizassem JAVA_HOME para executar no Oracle JDK, seguindo o exemplo a seguir .bashrc.

export JAVA_HOME=/usr/java/jdk1.6.0_45/
export PATH=$JAVA_HOME/bin:$PATH

Percebi que o Chrome ainda usa o OpenJDK (como ainda preciso vincular o plug-in).

Qual é a diferença entre JAVA_HOME e usar alternativas?

Sudhir Khanger
fonte

Respostas:

11

Alternativas

Alternatives é uma ferramenta que gerenciará os locais do software instalado usando links sob o controle da alternativesferramenta.

Esses links são finalmente gerenciados /etc/alternativescom links intermediários criados em um diretório $PATH, normalmente /usr/bin.

Exemplo

$ ls -l /usr/bin/java
lrwxrwxrwx. 1 root root 22 Feb 24 17:36 /usr/bin/java -> /etc/alternatives/java

$ ls -l /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 Feb 24 17:36 /etc/alternatives/java -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.0.fc19.x86_64/jre/bin/java

$ JAVA_HOME

$JAVA_HOMEé onde o software pode ser instruído a examinar o uso de uma variável de ambiente. Adicioná-lo ao $PATHsimplesmente adiciona os executáveis ​​presentes no $JAVA_HOME/binseu arquivo $PATH. Às vezes, isso é necessário para certas aplicações.

Os 2 mecanismos estão relacionados, mas podem ser usados ​​juntos ou independentemente um do outro, depende realmente do aplicativo Java qual mecanismo é preferível.

O que eu faço

Normalmente, uso $JAVA_HOMEem alguns aplicativos da interface gráfica do usuário, mas em geral o uso apenas para instalações de servidor que usam Jetty, Tomcat ou JBOSS, por exemplo.

Para essas instalações, ainda utilizarei alternativespara gerenciar as instalações Java antes de definir o $JAVA_HOME. Gosto de fazer dessa maneira nos casos em que talvez seja necessário ter várias instalações de Java.

Alternativas permite que certas ferramentas usem uma instalação do Java, enquanto outras utilizam uma completamente diferente.

Referências

slm
fonte
A oferta é que, com alternativas, eu posso usar diferentes componentes do Java. Por exemplo, pode definir Alternativas javae javaca partir de diferentes JDKs por outro lado JAVA_HOME=JAVALOCATIONseria apontar java, javace javawspara java, javace javawsem JAVALOCATION, respectivamente.
Sudhir Khanger
O motivo pelo qual fiz essa pergunta foi como posso usar o OpenJDK como Java Runtime padrão e fazer com que o Android Studio, Eclipse e SDK Manager usem o Oracle JDK. Eu posso executar esses três programas no Oracle JDK editando seus scripts de inicialização, que podem ser quebrados se forem atualizados. Eu estava procurando por algo mais genérico STUDIO_JDK, que eu possa adicionar ~/.profileou ~/.bashrcque seja usado pelo Android Studio para pegar o JDK, mas acho que o Android Bundle (Eclipse e SDK Manager) não vai honrar isso.
Sudhir Khanger
@donniezazen - sim STUDIO_JDKé uma coisa personalizada. Eu usaria alternativas para essas ferramentas e definiria JAVA_HOMEo caminho sob o /usr/binqual é gerenciado alternatives. Quando as atualizações são executadas, basta alterar alternatives.
Slm
Não tenho certeza do que você está propondo. Aponte os dois alternativese JAVA_HOMEdiga /usr/bin/java. Também parece JAVA_HOMEsubstituições alternatives.
Sudhir Khanger
@donniezazen - sim, use alternativas para gerenciar suas instalações JAVA e, em seguida JAVA_HOME, use-as , apontando-as /usr/bin. Você está correto, JAVA_HOMEpode operar independentemente alternatives.
Slm