J'ai plusieurs installations Java sur ma machine et je dois utiliser différentes versions à tout moment. J'ai constaté que la machine virtuelle Java actuellement utilisée peut être modifiée à l'aide des commandes update-alternatives
et update-Java-alternatives
, qui modifient essentiellement le lien situé en /etc/alternatives/Java
etc. pour pointer vers l'installation correcte de la JVM.
Est-il possible d'exécuter différentes versions de Java en spécifiant un paramètre de ligne de commande? Par exemple, pour exécuter maven par exemple des manières suivantes:
> Java_HOME=/usr/lib/jvm/Java-7-Oracle/ mvn clean install
> Java_HOME=/usr/lib/jvm/Java-6-Sun/ mvn clean install
EDIT: Les commandes ci-dessus fonctionnent
Nous pouvons vérifier que les commandes ci-dessus fonctionnent en exécutant
> Java_HOME=/usr/lib/jvm/Java-6-Sun mvn -version
Apache Maven 3.0.4
Maven home: /usr/share/maven
Java version: 1.6.0_32, vendor: Sun Microsystems Inc.
Java home: /usr/lib/jvm/Java-6-Sun-1.6.0.32/jre
La version Java et la page d'accueil sont correctes dans l'exemple.
EDIT: Solution au problème
Le problème initial était dû à une interface nommée CommonDataSource
modifiée dans le rt.jar
du jre, ce qui entraînait une incompatibilité entre différents JRE. La solution consistait à ajouter le rt.jar
de Java 6 au chemin d'accès aux classes:
Java_HOME=$Java6_HOME MAVEN_OPTS="-Xbootclasspath/a:$Java6_HOME/jre/lib/rt.jar" mvn clean install
Les exemples que vous montrez font exactement ce que vous recherchez. Ainsi, bien qu'un paramètre de ligne de commande ne fasse pas l'affaire, une variable d'environnement le fera. Et vous pouvez spécifier des variables d'environnement "ponctuelles" sur la ligne de commande, avant la commande.
La plupart des logiciels, sinon tous, basés sur Java respecteront la variable d'environnement Java_HOME
et exécuteront la machine virtuelle située sous ce répertoire. Maven le fait certainement: jetez un coup d'œil à less $(which mvn)
et voyez à quel point cela demande beaucoup d'efforts.
Notez que, dans le cas spécifique de Maven, si votre objectif est de compiler les sources Java pour une version plus ancienne de la machine virtuelle Java, il n'est pas nécessaire de changer de machine virtuelle. Au lieu de cela, spécifiez les versions source et cible Java dans votre POM.