Problématique
Comme beaucoup de développeurs Java pour m’assurer que mon code est bien compatible au niveau des APIs avec la cible recherchée (1.4, 1.5, 1.6, …) je dois utiliser la version de Java en question pour construire et tester mon projet (Par exemple Maven 2.0.x et ses plugins doivent toujours êtres compatibles avec Java 1.4).
Apple fournit les différentes versions de Java dont vous avez besoin. Dans mon cas j’ai récupéré la totale c’est à dire Java SE 6 (1.6.0_07), J2SE 5.0 (1.5.0_16), et J2SE 1.4.2 (1.4.2_18).
Maintenant comment passer d’une version à l’autre ? Il existe pour cela plusieurs solutions.
La solution ergonomique version Apple
Dans Applications/Utilities/Java
vous utilisez les Java preferences
et vous modifiez l’ordre des versions de Java disponibles pour les applications afin de mettre en premier la version souhaitée. La modification se fait instantanément (sans rechargement du shell) pour toute votre machine.
Passage en Java 1.6
Console :
[sourcecode language=’java’]arnaud@ahe:~$ java -version
java version “1.6.0_07”
Java(TM) SE Runtime Environment (build 1.6.0_07-b06-153)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_07-b06-57, mixed mode)[/sourcecode]
Passage en Java 1.5
Console :
[sourcecode language=’java’]arnaud@ahe:~$ java -version
java version “1.5.0_16”
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-284)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_16-133, mixed mode)[/sourcecode]
Passage en Java 1.4
Console :
[sourcecode language=’java’]arnaud@ahe:~$ java -version
java version “1.4.2_18”
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_18-b08-314)
Java HotSpot(TM) Client VM (build 1.4.2-90, mixed mode)[/sourcecode]
La version ligne de commande pour le geek
Lorsque l’on est geek et que l’on passe sa journée dans sa console shell, il faut avouer que l’on aime pas trop en sortir. La solution pour faire la même opération en ligne de commande consiste à utiliser un script setJDK.sh
(cf. ci-dessous) que vous placez dans un répertoire qui se trouve dans votre PATH (personnellement ~/Scripts
)
[sourcecode language=’java’]#!/bin/sh
cd /System/Library/Frameworks/JavaVM.framework/Versions
CURJDK=”`readlink CurrentJDK`”
echo Current JDK version: $CURJDK
if [ “$1” == “” ]; then
echo Installed versions:
ls
exit
fi
VERFOUND=`ls | grep $1 | head -n 1`
if [ “$VERFOUND” != “$1″ ]; then
BASE=”`basename $0`”
echo Error: Could not change JDK– version $1 not installed!
echo Run $BASE without arguments to see a list of installed versions.
exit 127
fi
echo You must now enter your Mac OS X password to change the JDK.
sudo ln -fhsv $1 CurrentJDK
# To activate if you have growl and growlnotify script installed
#growlnotify -n Java -m “Java now in $1″[/sourcecode]
Ensuite vous devez modifier votre PATH
(et en même temps ajouter le JAVA_HOME
) afin de passer avant les versions du système :
Dans ~/.bash_login
ou ~/.profile
.
[sourcecode language=’java’]# JAVA
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
export PATH=$JAVA_HOME/bin:$PATH[/sourcecode]
Attention de bien placer le $PATH
après le $JAVA_HOME/bin
!!!
Sans paramètre l’appel au script vous liste les différentes versions disponibles et la version actuellement configurée.
[sourcecode language=’java’]arnaud@ahe:~$ setJDK.sh
Current JDK version: 1.5
Installed versions:
1.3 1.4 1.4.2 1.5.0 1.6.0 Current
1.3.1 1.4.1 1.5 1.6 A CurrentJDK[/sourcecode]
Pour modifier la version vous la passez en paramètre du script.
[sourcecode language=’java’]arnaud@ahe:~$ setJDK.sh 1.4
Current JDK version: 1.5
You must now enter your Mac OS X password to change the JDK.
Password:
CurrentJDK -> 1.4
arnaud@ahe:~$ java -version
java version “1.4.2_18”
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_18-b08-314)
Java HotSpot(TM) Client VM (build 1.4.2-90, mixed mode)[/sourcecode]
Et voilà !
A noter que ces deux solutions sont incompatibles. Il faut donc faire votre choix. Pour la deuxième solution vous modifiez votre PATH
et les binaires Java ne sont donc plus chargés depuis /usr/bin
qui est nécessaire à la première solution.
Mes sources :
Merci pour cette article, donc la version orale d’hier m’a permis de builder avec maven un projet en java 1.6
Bonjour,
votre article est particulièrement intéressant.
J’ai toutefois un problème avec le lien de téléchargement des machines virtuelles qui pointe vers un article et je suis incapable de trouver des paquets java qui acceptent de s’installer sur mon système (Leopard snow). Quand j’essaye d’installer un paquet, j’ai un message qui me dit qu’il n’est pas pour mon système et je n’ai pas d’autre choix que de cliquer sur fermer…
Comment avez vous trouvé les téléchargements d’autres VM java ?
Merci pour votre aide
Malheureusement il semblerait que pour l’instant seuls les versions 1.6 32bits et 64bits soient disponible pour Snow Leopard. Ce qui m’embête bien et me fait hésiter à migrer 🙁
Je n’arrive plus aller sur le Net par Orange.
Un message me dit qu’il me faut java 1.5.0_16 alors que je suis en possession du 6 ? Où trouver ce 1.5 ? Merci
Si vous êtes sous Snow Leopard Il n’y a pas (et il n’y aura probablement pas) de version 1.5 pour Java. Il n’est pas normal que des sites vous demandes une version précise de Java. Cela devrait être une version minimum.
J’ai vu des astuces pour essayer d’installer la version 1.5 de Java pour Leopard sous Snow Leopard mais c’est super geek. Même moi je ne le tente pas …
Pour Snow leopard, il est possible de rajouter java 1.4 et 1.5 en suivant cet article : http://wiki.oneswarm.org/index.php/OS_X_10.6_Snow_Leopard