macos - desde - java para mac gratis
¿Cómo puedo cambiar la VM Java predeterminada de Mac OS devuelta desde/usr/libexec/java_home? (10)
(No estaba seguro si esto debería ir en SU ... la migración es ciertamente una opción, pero más programadores leen preguntas aquí, así que aquí va).
Estoy ejecutando Mac OS X 10.8.4, y tengo instalado el JDK 1.6.0_51 de Apple y el JDK 1.7.0_25 de Oracle. Hace poco instalé el JDK de previsualización 1.8 de Oracle para algún software de prelanzamiento que así lo requiera. Ahora, cuando ejecuto / usr / libexec / java_home, obtengo esto:
$ /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
Estupendo.
Sin embargo, corriendo:
$ java -version
Devoluciones:
java version "1.8.0-ea"
Eso significa que la versión predeterminada de Java es actualmente la versión preliminar, que rompe algunos paquetes "normales" (en mi caso, VisualVM).
No puedo establecer JAVA_HOME
porque el inicio de aplicaciones ignora las variables de entorno, incluso cuando se inicia desde la línea de comandos (por ejemplo, $ open /Applications/VisualVM.app
/ $ open /Applications/VisualVM.app
).
Entonces, ¿hay algún archivo que pueda editar donde pueda establecer mis preferencias de ordenamiento de JVM globalmente ?
(No me pidas que abra el Panel de Preferencias Java porque eso simplemente no funciona: no contiene nada útil y solo muestra una de las 4 JVM que he instalado).
Actualización :
Las JVM de Oracle viven en /Library/Java/JavaVirtualMachines
. Volver a nombrar el directorio JDK 1.8 a jdk1.8.0.jvm.xyz
no cambia nada: java_home
aún lo encuentra en el lugar correcto, y ejecutar / usr / bin / java aún ejecuta la JVM 1.8. Esto no es un problema con los enlaces de síntesis, etc.
Creo que JAVA_HOME
es lo mejor que puedes hacer. Las herramientas de línea de comandos como java
y javac
respetarán esa variable de entorno, puede usar /usr/libexec/java_home -v ''1.7*''
para darle un valor adecuado para ponerlo en JAVA_HOME
para hacer que las herramientas de línea de comando usen Java 7 .
export JAVA_HOME="`/usr/libexec/java_home -v ''1.7*''`"
Pero los paquetes de aplicaciones estándar con doble clic no usan los JDK instalados en /Library/Java
. Los paquetes .app
estilo .app
usan JavaApplicationStub
Apple usarán Apple Java 6 de /System/Library/Frameworks
, y los de estilo nuevo creados con AppBundler sin un JRE integrado usarán el JRE "público" en /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
- está codificado en el código auxiliar y no puede modificarse, y no puede tener dos JRE públicos diferentes instalados al mismo tiempo.
Editar: He echado un vistazo a VisualVM específicamente, suponiendo que está utilizando la versión del "paquete de aplicaciones" de la página de descargas , y esta aplicación en particular no es una aplicación de AppBundler, sino que su ejecutable principal es un script de shell que llama a un número de otros scripts de shell y lee varios archivos de configuración. De manera predeterminada, selecciona el JDK más reciente desde /Library/Java
, siempre que sea 7u10 o posterior, o utilice Java 6 si la instalación de Java 7 es la actualización 9 o anterior. Pero al desentrañar la lógica en los scripts de shell me parece que puede especificar un JDK en particular usando un archivo de configuración.
Cree un archivo de texto ~/Library/Application Support/VisualVM/1.3.6/etc/visualvm.conf
(reemplace 1.3.6 con la versión de VisualVM que esté utilizando) que contenga la línea
visualvm_jdkhome="`/usr/libexec/java_home -v ''1.7*''`"
y esto lo obligará a elegir Java 7 en lugar de 8.
En realidad es bastante fácil. Digamos que tenemos esto en nuestra carpeta JavaVirtualMachines:
- jdk1.7.0_51.jdk
- jdk1.8.0.jdk
Imagine que 1.8 es nuestro valor predeterminado, luego simplemente agregamos una nueva carpeta (por ejemplo, "vieja") y movemos la carpeta jdk predeterminada a esa nueva carpeta. Haga java -version
again et voila, 1.7!
Es bastante simple, si no te importa enrollarte las mangas ... / Library / Java / Home es el valor predeterminado para JAVA_HOME, y es solo un enlace que apunta a uno de:
- /System/Library/Java/JavaVirtualMachines/1.???.jdk/Contents/Home
- /Library/Java/JavaVirtualMachines/jdk1.???_??.jdk/Contents/Home
Así que quise cambiar mi versión JVM / JDK predeterminada sin cambiar el contenido de JAVA_HOME ... / Library / Java / Home es la ubicación estándar para la JVM / JDK actual y eso es lo que quería preservar ... me parece ser la forma más fácil de cambiar las cosas con los menores efectos secundarios.
En realidad es realmente simple. Para cambiar la versión de java que veas con java -version, todo lo que tienes que hacer es una versión de esto:
cd /Library/Java
sudo rm Home
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home ./Home
No me he tomado el tiempo, pero un script de shell muy simple que hace uso de / usr / libexec / java_home y ln para volver a marcar el enlace simbólico anterior debería ser estúpido, fácil de crear ...
Una vez que haya cambiado dónde / Library / Java / Home está apuntando ... obtendrá el resultado correcto:
cerebro:~ magneto$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM)
64-Bit Server VM (build 25.60-b23, mixed mode)
Las instrucciones de desinstalación de Oracle para Java 7 me funcionaron.
Extracto:
Desinstalar el JDK Para desinstalar el JDK, debe tener privilegios de Administrador y ejecutar el comando de eliminar como root o usando la herramienta sudo (8).
Navegue a / Library / Java / JavaVirtualMachines y elimine el directorio cuyo nombre coincida con el siguiente formato: *
/Library/Java/JavaVirtualMachines/jdk<major>.<minor>.<macro[_update]>.jdk
Por ejemplo, para desinstalar 7u6:
% rm -rf jdk1.7.0_06.jdk
MacOS usa / usr / libexec / java_home para encontrar la versión actual de Java. Una forma de evitar es cambiar el archivo plist explicado por @ void256 arriba. Otra forma es tomar la copia de seguridad de java_home y reemplazarla con su propia secuencia de comandos java_home con el código
echo $ JAVA_HOME
Ahora exporte JAVA_HOME a la versión deseada del SDK agregando los siguientes comandos a ~ / .bash_profile. export JAVA_HOME = "/ System / Library / Java / JavaVirtualMachines / 1.6.0.jdk / Contents / Home" launchctl setenv JAVA_HOME $ JAVA_HOME /// Hacer que la variable de entorno global
Ejecute el comando source ~ / .bash_profile para ejecutar los comandos anteriores.
Cada vez que se necesita cambiar JAVA_HOME puede restablecer el valor JAVA_HOME en el archivo ~ / .bash_profile.
Quería cambiar la versión de la versión java predeterminada 1.6 * a 1.7 *. Probé los siguientes pasos y funcionó para mí:
- Se eliminó el enlace "java" de / usr / bin
- Lo creó nuevamente, señalando la nueva ubicación:
En -s /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/bin/java java
- verificado con "java -version"
versión de Java "1.7.0_51"
Java (TM) SE Runtime Environment (compilación 1.7.0_51-b13)
Java HotSpot (TM) 64-Bit Server VM (compilación 24.51-b03, modo mixto)
También he estado allí y busqué en todas partes cómo funciona /usr/libexec/java_home
pero no pude encontrar ninguna información sobre cómo determina las máquinas virtuales Java disponibles que enumera.
He experimentado un poco y creo que simplemente ejecuta un ls /Library/Java/JavaVirtualMachines
y luego inspecciona ./<version>/Contents/Info.plist
de todos los tiempos de ejecución que encuentra allí.
Luego los clasifica descendiendo por la clave JVMVersion
contenida en Info.plist y de forma predeterminada usa la primera entrada como su JVM predeterminada.
Creo que lo único que podríamos hacer es cambiar el plist: sudo vi /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Info.plist
y luego modificar la versión de JVMV de 1.8.0
a otra cosa que lo ordene al fondo en lugar de la parte superior, como !1.8.0
.
Algo como:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<dict>
...
<key>JVMVersion</key>
<string>!1.8.0</string> <!-- changed from ''1.8.0'' to ''!1.8.0'' -->`
y luego desaparece mágicamente de la parte superior de la lista:
/usr/libexec/java_home -verbose
Matching Java Virtual Machines (3):
1.7.0_45, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
1.7.0_09, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home
!1.8.0, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
Ahora deberá cerrar la sesión / iniciar sesión y luego:
java -version
java version "1.7.0_45"
:-)
Por supuesto, no tengo idea si algo más se rompe ahora o si la versión 1.8.0-ea de Java todavía funciona correctamente.
Probablemente no deberías hacer nada de esto, sino simplemente desinstalar 1.8.0.
Sin embargo, hasta ahora esto ha funcionado para mí.
Tuve una situación similar, y el siguiente proceso funcionó para mí:
En la terminal, escribe
vi ~/.profile
A continuación, agregue esta línea en el archivo y guarde
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home
donde la versión es la de su computadora, como 1.7.0_25
Salga del editor, luego escriba el siguiente comando para que sea efectivo
source ~/.profile
Luego, escriba java -version para verificar el resultado
java -version
¿Qué es .profile? De: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515
.profile es un archivo oculto. Es un archivo opcional que le dice al sistema qué comandos ejecutar cuando el usuario cuyo archivo de perfil está registrando. Por ejemplo, si mi nombre de usuario es bruno y hay un archivo .profile en / Users / bruno /, todos sus contenidos se ejecutará durante el procedimiento de inicio de sesión.
Un poco tarde, pero como este es un problema constante con Mac OSX ...
La solución más simple que encontré fue simplemente eliminar las cosas OpenJDK que Apple instala. Cada vez que llega una actualización de Mac OSX, se instala y deberá eliminarla nuevamente.
Esto funciona muy bien si desarrolla aplicaciones para Google App Engine en su mac usando Java. El OpenJDK no funciona bien y la versión de Java que viene con la actualización de Mac OSX Yosemite hará que el complemento de Eclipse para App Engine falle en cada implementación con el útil error: "Tiempo de espera de lectura agotado".
Editar: esta información es para visualvm específicamente, no para ninguna otra aplicación java
Como lo mencionaron otros, necesita modificar visualvm.conf
Para la última versión de JvisualVM 1.3.6 en Mac, los directorios de instalación han cambiado.
Actualmente se encuentra en /Applications/VisualVM.app/Contents/Resources/visualvm/etc/visualvm.conf .
Sin embargo, esto puede depender de dónde haya instalado VisualVM. La forma más fácil de encontrar dónde está su VisualVM es iniciarlo, y luego observar el proceso usando:
ps -ef | grep VisualVM
Verás algo como:
... -Dnetbeans.dirs = / Aplicaciones / VisualVM.app / Contents / Resources / visualvm / visualvm ...
Desea tomar la propiedad netbeans.dir y buscar un directorio y encontrará la carpeta etc.
Descomente esta línea en el visualvm.conf y cambie la ruta al jdk
visualvm_jdkhome="/path/to/jdk"
Además, si tiene lentitud con su visualvm y tiene mucha memoria, le sugiero que aumente mucho la cantidad de memoria disponible y la ejecute en modo servidor:
visualvm_default_options="-J-XX:MaxPermSize=96m -J-Xmx2048m -J-Xms2048m -J-server -J-XX:+UseCompressedOops -J-XX:+UseConcMarkSweepGC -J-XX:+UseParNewGC -J-XX:NewRatio=2 -J-Dnetbeans.accept_license_class=com.sun.tools.visualvm.modules.startup.AcceptLicense -J-Dsun.jvmstat.perdata.syncWaitMs=10000 -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.d3d=false"