Ho cercato su Google circa /usr/libexec/java_home
, la maggior parte dei risultati riguarda l'impostazione della variabile di ambiente JAVA_HOME
utilizzando questo file eseguibile. Ma in effetti il mio JAVA_HOME
impostato nel file .zshrc
non è stato applicato ad alcune applicazioni come previsto. Perché installo JDK9 Early Access, quindi il risultato dell'esecuzione di /usr/libexec/java_home
puntava sempre alla mia directory JVM jdk9 e alcune applicazioni ignoravano il mio JAVA_HOME
corretto in .zshrc
e uso invece jdk9. Quindi queste applicazioni si bloccano sempre a causa dell'uso di jdk9. E questo problema può essere risolto cambiando il nome della directory jdk9 e lascia che jdk8 sia il primo quando eseguo ls -l /Library/Java/JavaVirtualMachines
.
Quindi sono piuttosto curioso dei dettagli di implementazione di /usr/libexec/java_home
. Ho cercato su di esso su alcune distribuzioni BSD e non l'ho trovato. Poi ho cercato il progetto open source di Darwin e nessun risultato. Quindi inizio a dubitare se riesco a trovare il codice sorgente di /usr/libexec/java_home
.
Ho aperto /usr/libexec/java_home
in visualizzazione binaria e ho scoperto che si tratta di un file di classe Java a causa del byte iniziale 0xCAFEBABE. Poi l'ho ricompilato e ho fallito. Quindi /usr/libexec/java_home
inizia con il numero magico del file di classe Java ma non è ricompensabile. In realtà il tipo di file di /usr/libexec/java_home
è ( Aggiornamento: è il mio fraintendimento. Il file eseguibile di Mach-O usa anche 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
Qualcuno ha saputo più dettagli di implementazione su questo file eseguibile /usr/libexec/java_home
? E perché emette la posizione di jdk9 se non cambio il nome della directory di jdk9.