Comment ajouter un JDK 1.4 avec update-alternatives (debian like)

Si vous utilisez une distribution Linux de type debian (comme Ubuntu), il existe un programme formidable nommé update alternatives. Il permet de choisir entre plusieurs versions d’un même programme, par exemple les JVM java.

Avec Ubuntu, viennnent les JDK 5 et 6. Si vous utilisez update-alternatives, vous pouvez d’ores et déjà changer de version à volonté. Mais comment faire si vous travaillez sur du code plus ancien qui nécessite une JVM 1.4  qui elle n’est pas installée dans votre Ubuntu ? (c’est plus fréquent qu’on pourrait espérer). Il vous faut d’abord installer à la main cette JVM.

Je passe les étape d’installation d’une JVM Sun sur un Linux (download chez Sun Oracle, dépliage de l’archive, lancement du binaire etc…).

Le problème de java, c’est qu’il y a de nombreux binaires : java bien sûr, mais aussi javac (le compilateur), javadoc, rmic etc… Allez faire un tour dans le répertoire bin de votre installation de  java, il y a du monde (27 pour un JDK 1.4)

La commande install de update-alternatives nous indique qu’il faut lister (avec  l’option —slave) tous les programmes qui changent. Il y en a 27, c’est assez laborieux à faire à la main, vous en conviendrez.

Avant la modification :

$ sudo update-alternatives --list java
/usr/lib/jvm/java-1.5.0-sun/jre/bin/java
/usr/lib/jvm/java-6-sun/jre/bin/java

Rendez-vous dans le répertoire bin de votre JDK (/opt/j2sdk1.4.2_18 chez moi) et lancez-vous :

sudo update-alternatives --verbose --install /usr/bin/java java
/opt/j2sdk1.4.2_18/bin/java 500 --slave /usr/share/man/man1/java.1 java.1
/opt/j2sdk1.4.2_18/man/man1/java.1
`for prog in *;  do echo --slave /usr/bin/$prog $prog
/opt/j2sdk1.4.2_18/bin/$prog; done | grep -v "java " | xargs`

Nous avons donc après la modification :

$ sudo update-alternatives --list java
/usr/lib/jvm/java-1.5.0-sun/jre/bin/java
/usr/lib/jvm/java-6-sun/jre/bin/java
/opt/j2sdk1.4.2_18/bin/java

A l’utilisation, c’est très simple : voici comment passer en JDK 1.4 sur ma machine :

sudo update-alternatives --set java /opt/j2sdk1.4.2_18/bin/java

On vérifie que tout s’est bien passé en demandant à java sa version

$ java -version
java version "1.4.2_18"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_18-b06)
Java HotSpot(TM) Client VM (build 1.4.2_18-b06, mixed mode)

On peut repasser au JDK 1.6 tout aussi facilement :

sudo update-alternatives --set java /usr/lib/jvm/java-6-sun/jre/bin/java

$ java -version
java version "1.6.0_07"
Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)