マシンに複数の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.jar
でCommonDataSource
という名前のインターフェイスが変更されたために発生し、異なるJRE間で非互換性が生じていました。解決策は、Java 6のrt.jar
をクラスパスに追加することでした。
Java_HOME=$Java6_HOME MAVEN_OPTS="-Xbootclasspath/a:$Java6_HOME/jre/lib/rt.jar" mvn clean install
示す例は、探しているものを正確に実行します。そのため、コマンドラインパラメーターではうまくいきませんが、環境変数ではうまくいきます。また、コマンドラインで、コマンドの前に「1回限り」の環境変数を指定できます。
すべてではないにしても、ほとんどの場合、JavaベースのソフトウェアはJava_HOME
環境変数を尊重し、そのディレクトリの下にあるJVMを実行します。 Mavenは確かにそうです。less $(which mvn)
を見て、これを正しくするためにどれだけの労力を費やしているかを確認してください。
-Mavenの特定の場合-古いJVMバージョンのJavaソースをコンパイルすることが目標である場合、JVMを切り替える必要がないことに注意してください。代わりに、POMでソースおよびターゲットJavaバージョンを指定します。