Busqué en Google sobre /usr/libexec/java_home
, la mayoría de los resultados hablan de configurar la variable de entorno JAVA_HOME
usando este ejecutable. Pero, de hecho, mi configuración JAVA_HOME
en el archivo .zshrc
no se aplicó a algunas aplicaciones como se esperaba. Debido a que instalo JDK9 Early Access, el resultado de la ejecución de /usr/libexec/java_home
siempre apuntaba a mi directorio JVM jdk9 y algunas aplicaciones simplemente ignoran mi JAVA_HOME
correcto en .zshrc
y usan jdk9 en su lugar. Así que estas aplicaciones siempre fallan debido al uso de jdk9. Y este problema se puede resolver cambiando el nombre del directorio jdk9 y dejando que jdk8 sea el primero cuando ejecuto ls -l /Library/Java/JavaVirtualMachines
.
Tengo mucha curiosidad por los detalles de implementación de /usr/libexec/java_home
. Lo busqué en algunas distribuciones BSD y no lo encontré. Luego busqué en el proyecto de código abierto de Darwin y tampoco obtuve resultados. Así que empiezo a dudar si puedo encontrar el código fuente de /usr/libexec/java_home
.
Abrí /usr/libexec/java_home
en la vista binaria y encontré que es un archivo de clase Java debido a los bytes iniciales 0xCAFEBABE. Luego lo volví a compilar y fallé. Por lo tanto, /usr/libexec/java_home
comienza con el número mágico del archivo de clase Java pero no es compilable. En realidad, el tipo de archivo de /usr/libexec/java_home
es ( Actualización: es mi malentendido. El archivo ejecutable Mach-O también utiliza 0xCAFEBABE )
$ file /usr/libexec/java_home
/usr/libexec/java_home: Mach-O universal binary with 2 architectures: [i386: Mach-O executable i386] [x86_64: Mach-O 64-bit executable x86_64]
/usr/libexec/java_home (for architecture i386): Mach-O executable i386
/usr/libexec/java_home (for architecture x86_64): Mach-O 64-bit executable x86_64
¿Alguien sabe más detalles de implementación sobre este archivo ejecutable /usr/libexec/java_home
? Y por qué se divulga la ubicación del jdk9 si no cambio el nombre del directorio del jdk9.