Utiliser différentes versions de Java sous Leopard

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

prefs_java_12
Configuration Java en 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

prefs_java_21
Configuration Java en 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

prefs_java_31
Configuration Java en 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 :

7 thoughts on “Utiliser différentes versions de Java sous Leopard”

  1. 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

  2. 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 🙁

  3. 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

  4. 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 …

Comments are closed.