Mountain Lion con Java 7 solamente

39

Realicé una instalación limpia de Mountain Lion e instalé JDK7.

java -versionen Terminal regresa java version "1.7.0_05"correctamente, aún las Preferencias de Java y algunos otros programas de Java (como Eclipse) dan como resultado instrucciones para instalar Java SE 6.

Puedo iniciar Eclipse perfectamente desde la línea de comandos con Java 7.

¿Hay alguna manera de hacer que esto funcione sin tener que instalar Java 6?

Nicolas
fuente
1
Esto está realmente en mal estado. ¿Por qué demonios esto todavía no está arreglado? ¿No es la seguridad aumentada la motivación principal por la cual Apple cedió el control sobre el procedimiento de actualización de Java? ¿Por qué OSX todavía me pide que instale un Java desactualizado? ¡Ay!
gentmatt
@gentmatt Java 7 no es una simple actualización para Java 6, es más como cambiar el sistema operativo. Algunas cosas se romperán usando la versión más grande y ambas versiones principales se actualizan para las correcciones de seguridad
user151019
@gentmatt Apple ya no quería Java y esencialmente lo abandonó. Oracle eligió recoger la pelota.
Thorbjørn Ravn Andersen
1
Todavía es estúpido requerir Java 6, dado que ahora está en desuso ...
Donal Fellows

Respuestas:

27

JDK 7 se instalará en /Library/Java/JavaVirtualMachines/1.7.0.jdk, JDK 6 en / System / Library / Java / JavaVirtualMachines.

Para engañar a OS X para que acepte Java 7 en lugar de proponer instalar Java 6, un simple enlace simbólico es suficiente:

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

La mayoría de los programas Java se ejecutarán con este pequeño truco sin la necesidad de instalar Java 6. Las Preferencias Java de OS X (y tal vez algunas otras) no funcionarán, ya que parece verificar explícitamente la versión de la JVM cuando se inicia.

Nicolas
fuente
1
La segunda línea no debería tener "su", debería ser "sudo ln -s ....."
David Morales
3
Acabo de hacer una instalación nueva que incluye JDK 7u9, y se instaló en /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk; las instrucciones funcionaron bien de lo contrario.
Geoffrey Wiseman
3
Cuidado con el enlace simbólico ... Apple lanzó recientemente una actualización de seguridad 1.6. Si aplica esta actualización desde Apple, el enlace simbólico parece engañar la actualización e instala la actualización 1.6 en donde apunta el enlace simbólico, es decir, 1.7 de Oracle.
Esto podría romper las cosas si un programa Java requiere Java 6 y no 7, podría romperse cuando usa la otra versión.
user151019
Aquí hay una mejor solución si estás en Mavericks: stackoverflow.com/questions/19563766/…
jedesah
4

Nota: si tiene algo que realmente necesita java6 y no funcionará con java7, es posible que desee retrasar la instalación de java7. La razón es que puede ser un poco complicado tratar de mantener tanto 6 como 7 en el mismo Macintosh, ya que el paquete de 7 hace algunos juegos con algunos de los elementos apple-6-java, como se detalla a continuación. Entonces, buscaré algunas instrucciones paso a paso sobre cómo mantener 6 y 7 en la misma Mac antes de implementar esto ... Ver también http://reviews.cnet.com/8301-13727_7-57533880-263/ java -ferences-missing-after-latest-os-x-java-update / el 18 de octubre de 2012.

DETALLES El script de shell de preinstalación en jre-7u9-macosx-x64.dmg simplemente elimina el panel de preferencias de Apple (así como el complemento), sin previo aviso, a continuación.

#!/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

=== Y el script posterior a la instalación configura un enlace 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}"
vainilla
fuente
-2

Mountain Lion con Java 7 solo

Estás en el camino correcto ... 

Sin instalar Java 6

... se espera que se instalen, como se describe en la pregunta.

Entonces mi respuesta corta es sí, puedes tener Java 7 solo; pero no sin una instalación de Java 6.

Tratar:

  1. permitir la instalación de Java por parte de Apple
  2. elimine, de los dos directorios a continuación, las versiones de Java que ya no son necesarias:

    / Library / Java / JavaVirtualMachines

    / Sistema / Biblioteca / Java / JavaVirtualMachines

(Para un caso como este, creo que puede ignorar los consejos habituales para no interferir con las /Systemcosas).

Graham Perrin
fuente
2
Java 7 se instala en / Library / Java / JavaVirtualMachines mientras que Java 6 se encuentra en / System / Library / Java / JavaVirtualMachines. Al eliminar 1.6.0.jdk de / System / Library / Java / JavaVirtualMachines, el cuadro de diálogo de instalación vuelve a aparecer. Lo que parece funcionar es hacer un enlace simbólico 1.6.0.jdk (bajo / Sistema / ...) al 1.7.0.jdk (bajo / Biblioteca / ...). Los programas Java que no comprueban la versión de Java funcionan bien (los bloques de preferencias de Java al inicio, ya que parece comprobar si Java 5 o 6 está instalado)
Nicolas
Genial, ¿te gustaría agregar tu propia respuesta? Por favor vote el mío, no me ofenderé, la suposición fue claramente incorrecta para la pregunta, un voto negativo ayudará a otros usuarios a no hacer conjeturas erróneas similares para problemas relacionados con Java.
Graham Perrin