Come posso passare da Java 7 a Java 6 su OS X 10.8.2?


84

Sto usando Java SE 7 per programmare giochi semplici per Windows e Mac, ma devo passare a Java 6 per eseguire giochi come Minecraft sul mio computer. Funzionava bene prima che aggiornassi a Mac OS X 10.8.2 Build 12C60.

Prima di questo aggiornamento ero in grado di aprire le Preferenze Java e spuntare Java 6 o Java 7. Ma ora non riesco a trovare le Preferenze Java.

Sto eseguendo OS X 10.8.2 (ultima versione).


3
Hai ragione, le Preferenze Java sono state rimosse con l'ultimo aggiornamento. Alcuni metodi di shell che ho provato non stanno funzionando, ma ci deve essere un meccanismo per facilitare questo quando si esegue anche il 7 più recente.
ylluminate il

Risposte:


41

Non penso sia possibile cambiare JRE (ambienti di runtime) vedi qui:

http://docs.oracle.com/javase/7/docs/webnotes/install/mac/mac-jre.html

quali Stati:

È possibile installare solo un JRE. L'installazione di un JRE rimuove il JRE precedentemente installato. La versione JRE utilizzata dal sistema può essere determinata in due modi:

Aggirare:

Ho avuto un problema simile a quello che hai con Minecraft con Wuala. Dove dovevo eseguire Wuala usando Java 1.6 mentre dovevo sviluppare con JDK 1.7 e ci sono riuscito aprendo il pacchetto Wuala.app e cambiando il suo script di avvio in:

/Applications/Wuala.app/Contents/MacOS/wuala

a partire dal:

exec java ${VMARGS} -cp "${JAR_DIR}/loader3.jar":/System/Library/Java/ com.wuala.loader3.Loader3 -alternateprogrampath "${JAR_DIR}" -installed $*

per:

/usr/libexec/java_home -v 1.6.0 --exec java ${VMARGS} -cp "${JAR_DIR}/loader3.jar":/System/Library/Java/ com.wuala.loader3.Loader3 -alternateprogrampath "${JAR_DIR}" -installed $*

Vale a dire semplicemente sostituendo: execcon:/usr/libexec/java_home -v 1.6.0 --exec

Questo è ovviamente piuttosto coinvolto e si romperà ogni volta che wuala si aggiorna automaticamente, ma altrimenti funziona.

Per usare un altro JDK vedi qui:

http://docs.oracle.com/javase/7/docs/webnotes/install/mac/mac-jdk.html

quali Stati:

Per eseguire una versione diversa di Java, specificare il percorso completo o utilizzare lo strumento java_home: /usr/libexec/java_home -v 1.7.0_06 --exec javac -version

Ecco un'illustrazione ed esempi dal mio setup:

Installazioni Oracle JDK:

odin:~ geff$ ls -al /Library/Java/JavaVirtualMachines 
total 0
21058660 0 drwxr-xr-x  3 root  wheel  - 102 24 Oct 18:04:33 2012 jdk1.7.0_09.jdk/
21061692 0 drwxr-xr-x  3 root  wheel  - 102 24 Oct 18:06:08 2012 jdk1.7.0_07.jdk/
21042328 0 drwxrwxr-x  3 root  wheel  - 102 20 Apr 06:58:53 2012 1.7.0.jdk/
21031664 0 drwxrwxr-x  7 root  admin  - 238 24 Oct 18:04:16 2012 ../
21042327 0 drwxr-xr-x  5 root  wheel  - 170 24 Oct 18:06:13 2012 ./

Apple ha fornito JDK:

odin:~ geff$ ls -al /System/Library/Java/JavaVirtualMachines 
total 0
21026468 0 drwxr-xr-x  3 root  wheel  - 102  1 Nov 17:49:02 2011 1.6.0.jdk/
21026436 0 drwxr-xr-x  6 root  wheel  - 204 24 Mar 23:04:06 2012 ../
21026467 0 drwxr-xr-x  3 root  wheel  - 102  1 Nov 17:49:02 2011 ./

Questo funziona anche per me per usare 1.6 JDK fornito da Apple

odin:~ geff$ /usr/libexec/java_home -v 1.6.0_37 --exec java -version
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)

Scegli tra le versioni Oracle 1.7:

Selezione del primo Oracle JDK 1.7.0_04

odin:~ geff$ /usr/libexec/java_home -v 1.7.0_04 --exec java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)

Selezione di JDK 1.7.0_07

odin:~ geff$ /usr/libexec/java_home -v 1.7.0_07 --exec java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)

Il JDK predefinito è il più alto:

odin:~ geff$ java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

Il valore predefinito è il livello di patch "più alto quando si utilizza solo un numero di versione minore:

odin:~ geff$ /usr/libexec/java_home -v 1.7.0 --exec java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

99

Si può usare il java_homemeccanismo in modo più conveniente.

Supponi di avere Java 7 come predefinito:

$ java -version
java version "1.7.0_15" 
…

Ora attiviamo Java 6:

$export JAVA_HOME=$(/usr/libexec/java_home -v 1.6)

Ed eccolo qui:

$ java -version
java version "1.6.0_41"
…

Ho aggiunto questi al mio .bashrcper rendere le cose ancora più convenienti:

alias java_ls='/usr/libexec/java_home -V 2>&1 | grep -E "\d.\d.\d[,_]" | cut -d , -f 1 | colrm 1 4 | grep -v Home'

function java_use() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    export PATH=$JAVA_HOME/bin:$PATH
    java -version
}

java_lsriduce l'output di java_home -Vsolo ai numeri di versione. Ed java_useè solo una scorciatoia per quello che abbiamo fatto sopra. Ad esempio java_use 1.6, passerà a Java 6.


3
in java_use dovresti rimuovere java precedente da $ PATH.
Eir Nym,

@EirNym come si farebbe?
Malcolm,

qualcosa che ho trovato utile per rimuovere java precedente da $ PATH stackoverflow.com/a/370192/1503859
Nitin Mahesh,

aggiorna java_use che ha funzionato per me: funzione java_use () {export JAVA_HOME = $ (/ usr / libexec / java_home -v $ 1) export PATH = echo $PATH | awk -v RS=: -v ORS=: '/Library\/Java\/JavaVirtualMachines/ {next} {print}'| sed 's/:$//' export PATH = $ JAVA_HOME / bin: $ PATH java -version}
Nitin Mahesh

35

Una soluzione per cambiare facilmente JDK (non sono sicuro di JRE) ( fonte ):

function setjdk() {  
  if [ $# -ne 0 ]; then  
   removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'  
   if [ -n "${JAVA_HOME+x}" ]; then  
    removeFromPath $JAVA_HOME  
   fi  
   export JAVA_HOME=`/usr/libexec/java_home -v $@`  
   export PATH=$JAVA_HOME/bin:$PATH  
  fi  
  echo JAVA_HOME set to $JAVA_HOME  
  java -version  
 }  
 function removeFromPath() {  
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")  
 }

(aggiungi la funzione sopra alla tua .bash_profile)

Uso:

$ setjdk 1.7

7

Una soluzione rapida è creare un collegamento simbolico al vecchio binario Java 6:

sudo ln -s /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Commands/java /usr/local/bin/java6

Quindi eseguire le app con: java6 -jar myapp.jar


3

L'app delle preferenze Java non sembra più elencare Java 1.6. Tuttavia quando controllo la versione di Java nella riga di comando ottengo:

java -version                                            
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)

3

È abbastanza semplice cambiare istantaneamente le versioni Java su OS X senza dover cambiare la variabile $ JAVA_HOME.

Sto eseguendo 10.8.2 e la mia variabile $ JAVA_HOME punta a / Library / Java / Home

echo $JAVA_HOME

Questo percorso è un collegamento simbolico, come si può vedere eseguendo il comando ls -l

ls -la /Library/Java

Il collegamento simbolico predefinito punta a

Home -> /Library/Java/JavaVirtualMachines/1.6.0_33-b03-424.jdk/Contents/Home/

Per reindirizzare java alla mia installazione 1.7, devo semplicemente sostituire il vecchio symlink Home con un nuovo symlink che punta alla directory home della mia installazione Java 1.7.

cd /Library/Java
mv Home Home-1.6
ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/ Home

E voilà! java -version mostra che ora sto eseguendo java 1.7. Basta cambiare il collegamento simbolico attualmente chiamato "Home" per modificare immediatamente il JRE java predefinito.


3

Ecco un modo semplice per cambiare java 6 e java 7 su mac osx.

passaggio 1: scaricare jdk 7 dal sito Web ufficiale di Oracle http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html e installarlo passo dopo passo seguendo i suggerimenti.

passaggio 2: impostare $ JAVA_HOME in .bash_profile

$ vim .bash_profile 

export JAVA_HOME=$(/usr/libexec/java_home)

$ source .bash_profile

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

passaggio 3: se vuoi usare jdk 6, solo $ JAVA_HOME alternativo al percorso principale di jdk 6

$ vim .bash_profile 

export JAVA_HOME=$(/usr/libexec/java_home -v 1.6)

$ source .bash_profile

$ echo $JAVA_HOME
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home


2

Sulla base di quanto sopra e di un po 'di altre ricerche, ho ideato uno script che puoi "fonte" (o "punto") nel tuo profilo. Ti verrà chiesto con un menu di JAVA_HOME disponibili sul tuo Mac, anche se puoi anche specificare la home predefinita o preselezionare una scelta di menu.

Nel mio .bash_profile:

export PREJAVA_PATH="$PATH:~/bin"
export PATH="${PREJAVA_PATH}"
. gojava -d

Nota che richiede una variabile PREJAVA_PATH. Puoi anche chiamarlo dalla riga di comando:

$ . gojava

O per pre-scegliere la seconda opzione:

$ . gojava -c 2

Il file gojavaè:

#!/bin/bash

_exe=/usr/libexec/java_home
_defaultHome=$($_exe)

usage() {
cat <<EOF
$0 [-d] [-c menu_choice]

Sets JAVA_HOME and PATH variables based on a user choice from a menu of available JDKs.

Parameters:

  -d : use system default ($_defaultHome)
  -c : specify a menu choice in advance, without being prompted

Note that environment variable PREJAVA_PATH must be set, and should include the PATH that 
you want with everything but JAVA_HOME/bin.

EOF
exit 1
}

setHomePath() {
  export JAVA_HOME="$1"
  export PATH="${JAVA_HOME}/bin":"${PREPATH}"
}

# TODO: [enhancement] figure out a better way to determine a PATH that excludes the JAVA_HOME
if [ -z "${PREJAVA_PATH}" ]; then
  usage  
else
  PREPATH=${PREJAVA_PATH}
fi

_default=0
_choice=0
OPTIND=1
while getopts "dc:" name; do
 case $name in
      d) _default=1 ;;
      c) _choice="$OPTARG" ;;
      *) echo "unknown parameter $name"
         usage
         ;;
 esac
done

if [ $_default -eq 1 ]; then
  setHomePath "$_defaultHome"
else
  i=1
  while read -r line; do
    choiceList[$i]="$line"
    homeList[$i]=$(echo $line | sed 's/[^\/]*\(\/.*\)/\1/')
    i=$(($i+1))
  done < <($_exe -V 2>&1 | egrep -v '^$|^\/|^Matching')

  if [ $_choice -gt 0 -a $_choice -lt $i ]; then
    setHomePath "${homeList[$_choice]}"
  else
    printf "\nList of available Java versions:\n"
    select choice in "${choiceList[@]}"; do
      if [ $REPLY -gt 0 -a $REPLY -lt $i ]; then
        setHomePath "${homeList[$REPLY]}"
        break
      fi
    done
  fi
fi

0

La versione Fish shell della risposta @alex (aggiungi a ~/config/fish/config.fish):

alias java_ls '/usr/libexec/java_home -V 2>&1 | grep -E "\d.\d.\d[,_]" | cut -d , -f 1 | colrm 1 4 | grep -v Home'

function java_use
    set JAVA_HOME (/usr/libexec/java_home -v $argv)
    set PATH $JAVA_HOME/bin $PATH
    java -version
end
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.