我的机器上安装了多个 Java,需要一直使用不同的版本。我发现可以通过命令update-alternatives
和更改当前使用的 JVM 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 版本和 home 是正确的。
编辑:问题的解决方案
原来的问题是由于CommonDataSource
jre中一个名为 的接口被改变了rt.jar
,导致不同的jre之间不兼容,解决办法是将java 6添加rt.jar
到classpath中:
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 版本。