Executar java diferente com base no parâmetro da linha de comando

4

Eu tenho várias instalações em java na minha máquina e preciso usar versões diferentes o tempo todo. Descobri que a JVM usada atualmente pode ser alterada pelos comandos update-alternatives e update-java-alternatives , que essencialmente alteram o link em /etc/alternatives/java etc. para apontar para a instalação correta da JVM.

É possível executar diferentes versões do java especificando um parâmetro de linha de comando? Por exemplo, para executar o maven, por exemplo, das seguintes maneiras:

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

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

EDIT: Comandos acima funcionam

Podemos verificar se os comandos acima funcionam executando

> 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

A versão java e home estão corretas no exemplo.

EDIT: Solução para o problema

O problema original foi causado por uma interface chamada CommonDataSource alterada no rt.jar do jre, o que causou incompatibilidade entre diferentes JREs. A solução foi adicionar o rt.jar do java 6 ao caminho de classe:

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

1 resposta

1

Os exemplos que você mostra fazem exatamente o que você está procurando. Portanto, embora um parâmetro de linha de comando não funcione, uma variável de ambiente será. E você pode especificar variáveis de ambiente 'one-time' na linha de comando, precedendo o comando.

A maioria, se não todos, o software baseado em Java honrará a variável de ambiente JAVA_HOME e executará a JVM localizada abaixo desse diretório. O Maven certamente faz isso: dê uma olhada em less $(which mvn) e veja quanto esforço ele faz para acertar isso.

Note que - no caso específico do Maven - se o seu objetivo é compilar fontes Java para uma versão mais antiga da JVM, então não há necessidade de alternar as JVMs. Em vez disso, especifique as versões Java de origem e de destino em seu POM.

    
por zwets 23.09.2013 / 15:40