Uma maneira geral de definir ou obter $ JAVA_HOME no Ubuntu?

8

Gostaria de saber se o próprio Ubuntu oferece uma maneira de encontrar todo o sistema atual JAVA_HOMEou se existe o lugar certo para a configuração JAVA_HOME.

O Mac OS X se sai bem nisso, pois o /usr/libexec/java_homecomando retorna a atual JAVA_HOME. Mas, para o Ubuntu, os materiais que encontrei sempre me pediam para definir o $JAVA_PATHapontador para um caminho estático, no qual são armazenados ~/.bash_profile.

Penso, no entanto, que esta abordagem tem várias desvantagens:

  1. Depois que o Java for atualizado, o número da mini versão será alterado, o que torna o caminho estático não mais disponível.
  2. Depois de mudar o JRE usado no meu sistema com update-alternatives, eu tenho que modificar $JAVA_HOMEno .bash_profile. Esse trabalho extra é irritante.
  3. Alguns $JAVA_HOMEprogramas obrigatórios não têm conhecimento .bash_profile. Eu tenho que definir $JAVA_HOMEno script de inicialização, portanto, uma maneira padrão e fácil de obter $JAVA_HOMEparece crítica para mim.

Bem, qualquer conselho é bem-vindo. Obrigado.

Jianwen W.
fonte

Respostas:

6

Um pouco hacky, mas coloque esta linha no seu /etc/profilepara configurá-lo em todo o sistema:

export JAVA_HOME=$(dirname $(dirname $(readlink -e /usr/bin/javac)))

fonte
Alguns administradores de sistemas gostam de mexer no PATH para que o / usr / bin não seja necessariamente o primeiro lugar a ser procurado. Para ter certeza de que você está escolhendo o caminho da versão que você realmente executará, um re-hack melhor pode ser: export JAVA_HOME=$(dirname $(dirname $(readlink -e $(which javac))))
SimonB 4/15/15
isso funciona se o caminho existir. Existe alguma maneira de silenciá-lo em sistemas que não possuem java?
greggles
como fazer isso no Mac? "readlink -e" não funciona.
Artanis Zeratul 6/04
1

Você pode definir variáveis ​​de ambiente /etc/environment, que são configuradas pelo PAM. Também deve haver links simbólicos nos /usr/lib/jvmquais não mudam com versões menores.

JAVA_HOME=/usr/lib/jvm/java-6-sun
mgorven
fonte
0

Definir perfil do sistema de caminho

Edite o arquivo de caminho do sistema / etc / profile

sudo gedit /etc/profile

Adicione as seguintes linhas no final

JAVA_HOME=/usr/lib/jvm/jdk1.7.0
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export JRE_HOME
export PATH

Para http://javaandme.com/ para obter o guia completo de instalação.

Pratap Singh
fonte
0

Se você tem certeza de que o comando 'java' pode ser chamado, isso não funcionaria para você?

export JAVA_HOME=$(dirname $(java -XshowSettings:properties -version 2>&1 | grep 'java\.home' | awk '{ print $3 }'))
mlvnd
fonte
O OP está procurando uma maneira de definir todo o $JAVA_HOMEsistema, não apenas no shell atual.
Celada
0

A solução aceita pelo usuário13742 pressupõe que o servidor definitivamente tenha o Java instalado. Caso você esteja adicionando isso a um script centralizado para muitos servidores, ocorrerão alguns erros como:

dirname: missing operand
Try 'dirname --help' for more information.

Para evitar isso e configure apenas JAVA_HOME se o servidor tiver um ambiente Java, um pequeno aprimoramento é:

if [ -f "$(which javac)" ]; then
    export JAVA_HOME=$(dirname $(dirname $(readlink -e $(which javac))))
fi

Também incorporei a alteração do SimonB whichpara descobrir onde está a instalação.

greggles
fonte
Posso colocar isso /etc/environment?
Jin Kwon