Soy nuevo en mac (vengo del mundo de Windows). He leído un poco sobre cómo y dónde se configura JAVA HOME en una máquina mac. Tengo algunas suposiciones que se enumeran a continuación, sería genial si alguien puede ir a través y proporcionar algunos comentarios sobre el mismo.
-
/Library/Java/JavaVirtualMachines es donde veo instalados jdk 1.7 y jdk 1.8. En el futuro, si instalo más versiones de JDK, supongo que se instalarán en esta ruta.
-
Veo que /System/Library/Java/JavaVirtualMachines/ tiene 1.6.0.jdk instalado. Supongo que se trata del Java 6 de Apple que viene instalado con mi mac por defecto. Además, ¿cuál es la diferencia entre instalar un JDK en /Library/Java/JavaVirtualMachines/ frente a /System/Library/Java/JavaVirtualMachines/.
-
/usr/libexec/java_home -V es una utilidad que lista todas las jvm;s en la máquina. Veo correctamente JVM 1.6 (x86, i386), 1.7 y 1.8. He añadido "export JAVA_HOME=
/usr/libexec/java_home
" en mi .bash_profile para establecer mi java_home a JDK 1.8. -
/Sistema/Biblioteca/Frameworks contiene un montón de accesos directos en su interior. Realmente no quiero pasar tiempo entendiendo los frameworks en este punto, pero esto parece ser algún tipo de capa de redirección para decidir qué JVM usar. Hay una carpeta llamada /System/Library/Frameworks/JavaVM.framework/Versions que contiene un montón de accesos directos (1.4, 1.6, 1.6.0 etc) que apuntan a CurrentJDK. CurrentJDK es un acceso directo a jdk 1.6 (/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents)
¿Qué implicaciones tiene esto? ¿Qué ocurre si JAVA_HOME apunta al JDK 1.8 y /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK apunta al jdk 1.6?
¿Significa esto que cuando cambiamos JAVA_HOME, debemos cambiar también /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK?
-
Hay otra carpeta llamada /System/Library/Frameworks/JavaVM.framework/Versions/Current/ que es un acceso directo a /System/Library/Frameworks/JavaVM.framework/Versions/A. Ahora, he leído en algún post que
Los ejecutables de java en >System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java no son >los ejecutables que sólo ejecutan el compilador de java, etc. Son envoltorios que >utilizan /usr/libexec/java_home para encontrar los ejecutables.
Estoy asumiendo que si los programas obtienen el último java de /System/Library/Frameworks/JavaVM.framework/Versions/Current/ y si /System/Library/Frameworks/JavaVM.framework/Versions/Current/ usa /usr/libexec/java_home para encontrar los ejecutables entonces terminaría usando jdk 1.8 en mi caso. ¿Esta suposición es correcta?
- Por lo tanto, parece que hay 4 variables aquí, donde $JAVA_HOME está apuntando, donde /usr/libexec/java_home te lleva, donde hace /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK punto a y finalmente donde hace /System/Library/Frameworks/JavaVM.framework/Versions/Current punto a. Sería estupendo si alguien pudiera comentar la forma correcta de configurar JAVA_HOME para que todas las aplicaciones, el terminal de Windows, etc. utilicen la misma versión de JVM.