¿Por qué / usr / libexec / java_home apunta al directorio jdk9-ea si no cambio el nombre del directorio jdk9-ea?

0

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.

    
pregunta bitweaver 22.10.2016 - 03:19

0 respuestas

Lea otras preguntas en las etiquetas