Perché / usr / libexec / java_home punta alla directory jdk9-ea se non cambio il nome della directory jdk9-ea

0

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.

    
posta bitweaver 22.10.2016 - 03:19
fonte

0 risposte

Leggi altre domande sui tag