Esegui java diversi in base al parametro della riga di comando

4

Ho più installazioni java sulla mia macchina e devo usare sempre versioni diverse. Ho scoperto che la JVM attualmente utilizzata può essere modificata dai comandi update-alternatives e update-java-alternatives , che essenzialmente modificano il collegamento in /etc/alternatives/java ecc. Per puntare all'installazione JVM corretta.

È possibile eseguire diverse versioni di java specificando un parametro della riga di comando? Ad esempio, per eseguire Maven ad esempio nei seguenti modi:

> JAVA_HOME=/usr/lib/jvm/java-7-oracle/ mvn clean install

> JAVA_HOME=/usr/lib/jvm/java-6-sun/ mvn clean install

MODIFICA: i comandi precedenti funzionano

Possiamo verificare che i suddetti comandi funzionino eseguendo

> 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 versione java e home sono corrette nell'esempio.

EDIT: soluzione al problema

Il problema originale è stato causato da un'interfaccia denominata CommonDataSource modificata in rt.jar del jre, che ha causato l'incompatibilità tra diversi JRE. La soluzione era aggiungere il% di java% di java al classpath:

JAVA_HOME=$JAVA6_HOME MAVEN_OPTS="-Xbootclasspath/a:$JAVA6_HOME/jre/lib/rt.jar" mvn clean install
    
posta RJo 23.09.2013 - 14:53

1 risposta

1

Gli esempi che mostri fanno esattamente quello che stai cercando. Quindi, sebbene un parametro della riga di comando non faccia il trucco, lo farà una variabile d'ambiente. E puoi specificare variabili d'ambiente "una tantum" sulla riga di comando, precedendo il comando.

La maggior parte, se non tutto, il software basato su Java rispetterà la variabile di ambiente JAVA_HOME ed eseguirà la JVM che si trova sotto quella directory. Maven certamente lo fa: dai uno sguardo a less $(which mvn) e vedi quanto impegno ci vuole per ottenere questo.

Nota che - nel caso specifico di Maven - se il tuo obiettivo è compilare sorgenti Java per una versione JVM precedente, non è necessario cambiare JVM. Invece, specifica le versioni Java di origine e di destinazione nel tuo POM.

    
risposta data zwets 23.09.2013 - 15:40

Leggi altre domande sui tag