(Não tinha certeza se isso deveria continuar no SU ... a migração é certamente uma opção, mas mais programadores lêem as perguntas aqui, então aqui vai).
Estou executando o Mac OS X 10.8.4 e tenho o JDK 1.6.0_51 da Apple instalado, bem como o JDK 1.7.0_25 da Oracle. Recentemente, instalei o JDK de visualização 1.8 da Oracle para alguns softwares de pré-lançamento que exigem isso. Agora, quando executo / usr / libexec / java_home, recebo o seguinte:
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (4):
1.8.0, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
1.7.0_25, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home
1.6.0_51-b11-457, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_51-b11-457, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Ótimo.
No entanto, executando:
$ java -version
Retorna:
java version "1.8.0-ea"
Isso significa que a versão padrão do Java é atualmente a versão de pré-lançamento, o que quebra alguns pacotes "normais" (no meu caso, VisualVM).
Não consigo definir JAVA_HOME
porque o lançamento de aplicativos ignora variáveis de ambiente, mesmo ao iniciar a partir da linha de comando (por exemplo$ open /Applications/VisualVM.app
).
Então, há um arquivo que eu posso editar onde posso definir minhas preferências de pedido JVM globalmente ?
(Por favor, não me diga para iniciar o painel de preferências do Java porque isso simplesmente não funciona: ele não contém nada de útil e lista apenas uma das 4 JVMs que instalei.)
Atualização :
Oracle JVMs residem em /Library/Java/JavaVirtualMachines
. Renomear o diretório JDK 1.8 para jdk1.8.0.jvm.xyz
não muda nada: java_home
ainda o encontra no lugar certo e a execução de / usr / bin / java ainda executa a JVM 1.8. Isso não é um problema com links de sincronização, etc.
Respostas a perguntas semelhantes
Embora esta resposta ofereça o que equivale a um hack que removerá versões do Java de serem capturadas por java_home, ela ainda não responde a esta questão de como java_home escolhe seu padrão e se os usuários podem ou não configurá-lo de forma não destrutiva .
/usr/bin/java
aponta para /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
. O Versions
diretório não contém um link simbólico para o JDK 1.8.0. Em vez disso, ele contém um diretório chamado útil, A
que Current
aponta para. A
não é um "JAVA_HOME. Ele tem um subdiretório chamado Commands
que tem um java
comando, mas é um binário universal opaco que faz sabe-se lá o quê. Suspeito que ele usa java_home
etc. para decidir qual JVM usar.
/usr/bin/java
é apenas um link simbólico