是否可以使用不同版本的 java 来 运行 jar 文件?

Is it possible to run jar files using different versions of java?

因此,我们是 运行 Power PC 机器(64 位)上的 hadoop。它使用 IBM JDK 运行。但是,在该 hadoop map reduce 程序中,会生成不同的进程(使用 ProcessBuilder class)来执行 jar 程序。问题是那些程序有问题 运行 IBM JDK 的虚拟机,因此需要打开 JDK。同样,hadoop 在 Power PC 上的 OpenJDK 也有问题 运行。所以我想知道,是否可以使用不同版本的 java 执行 jar 文件。因此,例如,在这种情况下,hadoop 使用 IBM JDK,而在 map reduce 程序中执行的 jar 文件使用 Open JDK。基本上,我们需要同时为程序 运行 使用不同的 java 虚拟机。

您在评论中提供了最重要的信息 - 通过 ProcessBuilder class 生成。此 class 在 OS 级别进行调用,因此您可以以此启动任何进程,并且它们与启动它们的 Java 进程完全分开。所以一般的答案是"yes, this is possible"。只需确保 ProcessBuilder 调用不同的 Java 安装。

您的 Java 版本只是相关安装目录的 link。所以当你安装各种(下载在这里:http://www.ibm.com/developerworks/java/jdk/linux/download.html)然后你只需要改变link(ln -s)到那个子目录。例如,我们在系统上保留了 java 的 4 个版本:

/usr/java/java_7_64bt
/usr/java/java_7_32bt
/usr/java/java_6_64bt
/usr/java/java_6_32bt
# ls -l /usr/java
lrwxrwxrwx. 1 root root 22 Aug  5 15:00 /usr/bin/java ->  /usr/java/java_7_64bit/java

然后其他程序可以只调用 /usr/bin/java 或所需版本的直接路径,而 hadoop 调用其他程序。