para mac gratis desde descargar control change cambiar actualizar macos java

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í:

  1. En la terminal, escribe

    vi ~/.profile

  2. 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

  3. 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"