web-dev-qa-db-ja.com

コマンドラインパラメーターに基づいて異なるJavaを実行します

マシンに複数のJavaインストールがあり、常に異なるバージョンを使用する必要があります。現在使用されているJVMは、update-alternativesおよびupdate-Java-alternativesコマンドによって変更できることがわかりました。これらのコマンドは、/etc/alternatives/Javaなどのリンクを変更して、正しいJVMインストールを指すようにします。

コマンドラインパラメータを指定することにより、Javaの異なるバージョンを実行できますか?たとえば、次の方法でmavenを実行するには:

> Java_HOME=/usr/lib/jvm/Java-7-Oracle/ mvn clean install

> Java_HOME=/usr/lib/jvm/Java-6-Sun/ mvn clean install

編集:上記のコマンドは機能します

上記のコマンドが動作することを確認するには、次を実行します。

> 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

この例では、Javaバージョンとホームが正しいです。

編集:問題の解決策

元の問題は、jreのrt.jarCommonDataSourceという名前のインターフェイスが変更されたために発生し、異なるJRE間で非互換性が生じていました。解決策は、Java 6のrt.jarをクラスパスに追加することでした。

Java_HOME=$Java6_HOME MAVEN_OPTS="-Xbootclasspath/a:$Java6_HOME/jre/lib/rt.jar" mvn clean install
4
RJo

示す例は、探しているものを正確に実行します。そのため、コマンドラインパラメーターではうまくいきませんが、環境変数ではうまくいきます。また、コマンドラインで、コマンドの前に「1回限り」の環境変数を指定できます。

すべてではないにしても、ほとんどの場合、JavaベースのソフトウェアはJava_HOME環境変数を尊重し、そのディレクトリの下にあるJVMを実行します。 Mavenは確かにそうです。less $(which mvn)を見て、これを正しくするためにどれだけの労力を費やしているかを確認してください。

-Mavenの特定の場合-古いJVMバージョンのJavaソースをコンパイルすることが目標である場合、JVMを切り替える必要がないことに注意してください。代わりに、POMでソースおよびターゲットJavaバージョンを指定します。

1
zwets