Leão da montanha apenas com Java 7

39

Eu executei uma instalação limpa do Mountain Lion e instalei o JDK7.

java -versionno Terminal retorna java version "1.7.0_05"corretamente, ainda as preferências Java e alguns outros programas Java (como o Eclipse) resultam em avisos para a instalação do Java SE 6.

Eu posso iniciar o Eclipse perfeitamente na linha de comando com o Java 7.

Existe uma maneira de fazer isso funcionar sem precisar instalar o Java 6?

Nicolas
fonte
1
Isso está realmente bagunçado. Por que diabos isso ainda não está consertado? O aumento da segurança não é a principal motivação do motivo pelo qual a Apple desistiu do controle sobre o procedimento de atualização do Java? Por que, então, o OSX ainda me solicita a instalação de um Java desatualizado? Caramba!
gentmatt
@gentmatt O Java 7 não é uma atualização simples para o Java 6 - é mais como mudar sistemas operacionais. Algumas coisas vão quebrar usando a versão maior e ambas as versões principais são atualizados para correções de segurança
user151019
@gentmatt A Apple não queria mais o Java e basicamente o abandonou. A Oracle escolheu pegar a bola.
Thorbjørn Ravn Andersen
1
Ainda é estúpido para exigir Java 6, uma vez que é agora obsoleto ...
Donal Fellows

Respostas:

27

O JDK 7 será instalado em /Library/Java/JavaVirtualMachines/1.7.0.jdk, JDK 6 em / System / Library / Java / JavaVirtualMachines.

Para enganar o OS X a aceitar o Java 7 em vez de propor a instalação do Java 6, basta um link simbólico simples:

sudo mkdir /System/Library/Java/JavaVirtualMachines
sudo ln -s /Library/Java/JavaVirtualMachines/1.7.0.jdk /System/Library/Java/JavaVirtualMachines/1.6.0.jdk

A maioria dos programas Java será executada com esse pequeno hack, sem a necessidade de instalar o Java 6. As preferências do Java do OS X (e talvez algumas outras) não funcionarão, pois parece verificar explicitamente a versão da JVM quando for iniciada.

Nicolas
fonte
1
A segunda linha não deve ter "su", deve ser "sudo ln -s ....."
David Morales
3
Acabei de fazer uma nova instalação, incluindo o JDK 7u9, e ela foi instalada no /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk; as instruções funcionaram bem caso contrário.
Geoffrey Wiseman
3
Cuidado ao fazer o link simbólico ... A Apple lançou a atualização de segurança 1.6 recentemente. Se você aplicar esta atualização da Apple, o link simbólico parece enganar a atualização e instala a atualização 1.6 para onde o link simbólico aponta, ou seja, o 1.7 da Oracle.
Isso pode quebrar algumas coisas se um programa Java exigir Java 6 e não 7, pode quebrar quando você usar a outra versão.
user151019
Aqui está uma solução melhor se você estiver no Mavericks: stackoverflow.com/questions/19563766/…
jedesah
4

Nota: se você tem algo que realmente precisa do java6 e não funciona com o java7, convém interromper a instalação do java7. O motivo é que pode ser um pouco complicado tentar manter os 6 e 7 no mesmo macintosh, pois o 7 pkg mexe um pouco com alguns dos itens apple-6-java, conforme detalhado abaixo. Portanto, procurarei instruções passo a passo sobre como manter 6 e 7 no mesmo mac antes de lançar isso ... Consulte também http://reviews.cnet.com/8301-13727_7-57533880-263/ java-preferências-ausente-após-mais-recente-os-x-java-update / em 18 de outubro de 2012.

DETALHES O script shell de pré-instalação no jre-7u9-macosx-x64.dmg apenas remove o painel de pré-visualização da Apple (assim como o plug-in), sem aviso, abaixo.

#!/bin/bash
PLUGIN_BASEDIR=/Library/Internet\ Plug-Ins
PLUGIN_NAME=${PLUGIN_BASEDIR}/JavaAppletPlugin.plugin
MKDIR=`which mkdir`
RM=/bin/rm
# Remove the symlink before installation forcing ystem Preferences.app to refresh its cache
PREF_PANE_NAME=JavaControlPanel.prefpane
PREF_PANE_DEST=/Library/PreferencePanes/
# Actually removes the symlink
if [[ -h "${PREF_PANE_DEST}/${PREF_PANE_NAME}" ]]; then
     ${RM} -rf "${PREF_PANE_DEST}/${PREF_PANE_NAME}"
fi
# Create the /Library/Internet Plug-Ins if not present
if [[ ! -d "${PLUGIN_BASEDIR}" ]]; then
     ${MKDIR} -p "${PLUGIN_BASEDIR}"
fi
# If Apple's plugin is present, then delete it
if [[ -h "${PLUGIN_NAME}" ]] && [[ -d "${PLUGIN_NAME}" ]]; then
    ${RM} -rf "${PLUGIN_NAME}"
fi

=== E o script pós-instalação configura um link simbólico ===

#!/bin/bash
LN=`which ln`
CHOWN=`which chown`
PLUGIN_FILEPATH=/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
PREF_PANE_NAME=JavaControlPanel.prefpane
PREF_PANE_SRC=/Library/Internet\ Plug-       Ins/JavaAppletPlugin.plugin/Contents/Home/lib/deploy/JavaControlPanel.prefpane
PREF_PANE_DEST=/Library/PreferencePanes/
if [ ! -h "${PREF_PANE_DEST}/${PREF_PANE_NAME}" ]; then
    ${LN} -s "${PREF_PANE_SRC}" "${PREF_PANE_DEST}"
fi
${CHOWN} -R root:wheel "${PLUGIN_FILEPATH}"
baunilha
fonte
-2

Leão da montanha com Java 7 sozinho

Você está no caminho certo ... 

Sem instalar o Java 6

… São solicitados prompts para instalação, conforme descrito na pergunta.

Portanto, minha resposta curta é sim, você pode ter o Java 7 sozinho; mas não sem uma instalação do Java 6.

Experimentar:

  1. permitir a instalação do Java pela Apple
  2. remova, dos dois diretórios abaixo, as versões do Java que não são mais necessárias:

    / Biblioteca / Java / JavaVirtualMachines

    / Sistema / Biblioteca / Java / JavaVirtualMachines

(Para um caso como esse, acho que você pode ignorar com segurança os conselhos habituais para não interferir nas /Systemcoisas.)

Graham Perrin
fonte
2
O Java 7 é instalado em / Library / Java / JavaVirtualMachines enquanto o Java 6 está em / System / Library / Java / JavaVirtualMachines A exclusão de 1.6.0.jdk de / System / Library / Java / JavaVirtualMachines resulta no diálogo de instalação sendo exibido novamente. O que parece funcionar é criar um link simbólico 1.6.0.jdk (em / System / ...) para o 1.7.0.jdk (em / Library / ...). Programas Java que não verificar a multa versão run Java (Java Preferências blocos no início como parece verificar se o Java 5 ou 6 está instalado)
Nicolas
Legal - você gostaria de adicionar sua própria resposta? Por favor, vote na minha opinião - não vou me ofender - o palpite estava claramente incorreto para a pergunta; uma votação para baixo ajudará outros usuários a não fazer suposições igualmente equivocadas sobre problemas relacionados ao Java.
Graham Perrin