Rimuovere Java dal Mac senza rompere la toolchain
Ci sono due domande nascoste in "disinstallare Java su Mac", e rispondere a quella sbagliata è come la gente si ritrova con una toolchain rotta. La prima è quale Java hai. La seconda è cos'altro sulla macchina conta sulla sua presenza.
Le istruzioni di Oracle sono brevi, e la riga più importante non è un passaggio. È un avviso su una directory che dovresti lasciare stare.
Non rimuovere Java da /usr/bin
Oracle lo afferma direttamente: non tentare di disinstallare Java rimuovendo gli strumenti Java da /usr/bin. Quella directory fa parte del software di sistema, e ogni modifica viene annullata da Apple al successivo aggiornamento di macOS.
Questo è il modo più comune in cui l'operazione va male. Digitare which java restituisce un percorso sotto /usr/bin, che sembra la risposta, e non lo è. Su macOS quelli sono stub che puntano al runtime effettivamente installato. Eliminarli rimuove i cartelli, non l'edificio, e macOS li ripristina comunque in seguito.
Sapere quale Java stai rimuovendo
Un runtime e un kit di sviluppo sono installazioni diverse con rimozioni diverse.
Il JRE di Oracle, il runtime per utenti finali con il plug-in del browser e il pannello delle preferenze, si trova in tre posti che Oracle indica:
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin
/Library/PreferencePanes/JavaControlPanel.prefPane
~/Library/Application Support/Oracle/Java
Un JDK è separato, si installa sotto /Library/Java/JavaVirtualMachines/, e rimuoverlo richiede privilegi di amministratore. Puoi averne diversi affiancati, il che è normale e spesso voluto.
Elenca cosa è effettivamente installato prima di decidere:
/usr/libexec/java_home -V
Questo stampa ogni JDK che il sistema conosce, con versione e percorso. Se l'elenco ha una sola voce, la scelta è semplice. Se ne ha quattro, allora conta la sezione successiva.
Rimuovere il JDK sbagliato rompe altro software
Java è raramente installato da solo. Strumenti Android, Elasticsearch, launcher Minecraft, IDE JetBrains, strumenti Apache e diversi client VPN e di stampa aziendali includono una JVM oppure ne dipendono. Alcuni includono la propria copia e non ne risentono. Altri usano ciò che il sistema offre e smettono di funzionare quando cambia.
Se un JDK è stato installato da un gestore di pacchetti, rimuovilo con lo stesso gestore con cui è arrivato. Un temurin installato con Homebrew si disinstalla con brew uninstall, e togliere i file a mano lascia il database dei pacchetti convinto che sia ancora presente.
Rimuovi un JDK nel modo ufficiale
Per un JDK installato da un .pkg, si rimuove la directory sotto /Library/Java/JavaVirtualMachines/ che porta la versione nel nome, e serve sudo. Rimuovi una versione alla volta e controlla gli strumenti che ti interessano prima di rimuovere la successiva.
Dopo, /usr/libexec/java_home -V non dovrebbe più elencarlo, e qualsiasi JAVA_HOME impostato a mano in un profilo shell ora non punta a nulla. Quella variabile è la seconda causa più comune di una toolchain che fallisce dopo una rimozione pulita.
Controlla prima di chiudere il Terminale
/usr/libexec/java_home -V
java -version
Il primo mostra cosa resta. Il secondo o riporta una versione o ti dice che nessun runtime è installato, che su una macchina che volevi ripulire è la risposta corretta e non un errore.
Dove aiuta vedere l'impronta
I residui di Java sono piccoli, sparsi e noiosi: cache, preferenze, un plug-in, un pannello delle preferenze. La parte interessante è l'inventario, e il Terminale te lo dà già. Se preferisci vedere l'intera impronta di un JDK o delle app che ne includono uno, in un unico elenco con dimensioni, Mole lo fa senza chiederti di conoscere i percorsi in anticipo.
Tre posti da controllare dopo
Il primo è il profilo della shell. Un JAVA_HOME scritto a mano in ~/.zshrc o
~/.zprofile non sparisce insieme al JDK. Continua a puntare a un percorso che non
esiste più, e ogni nuova shell eredita la variabile rotta. Rimuovi la riga,
oppure cambiala in export JAVA_HOME=$(/usr/libexec/java_home) così segue
qualsiasi JDK presente sul sistema.
Il secondo sono gli IDE. Gli strumenti JetBrains e Android Studio memorizzano un percorso JDK specifico per progetto e non seguono un cambiamento di sistema: il sintomo tipico è un progetto che non compila mentre dalla riga di comando tutto funziona.
Il terzo è tutto ciò che ha installato un package manager.
brew list | grep -i -E 'jdk|temurin|zulu|openjdk' mostra cosa proviene da Homebrew.
Quelli si disinstallano con brew uninstall; cancellare le directory a mano lascia
il database dei pacchetti convinto che siano ancora installati.