web-dev-qa-db-fra.com

Exécuter différents Java en fonction du paramètre de ligne de commande

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
4
RJo

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.

1
zwets