4

我从 CentOS 和 OpenJDK 1.7 开始

# java -version
java version "1.7.0_25"
OpenJDK Runtime Environment (rhel-2.3.10.4.el6_4-x86_64)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

为了运行特定的应用程序,我想使用由 RPM 提供的 Oracle 的 Java 1.6。

我将 Oracle 二进制文件复制到了一个特定的新目录:

# pwd
/oracleJava/jdk-6u45-linux-x64-rpm

我提取了二进制文件,它给了我以下文件:

# ls
jdk-6u45-linux-amd64.rpm               
sun-javadb-core-10.6.2-1.1.i386.rpm  sun-javadb-javadoc-10.6.2-1.1.i386.rpm
sun-javadb-client-10.6.2-1.1.i386.rpm  sun-javadb-demo-10.6.2-1.1.i386.rpm
sun-javadb-common-10.6.2-1.1.i386.rpm  sun-javadb-docs-10.6.2-1.1.i386.rpm

我安装了 RPM 并且 rpm 实用程序认为它安装正确: rpm -q jdk jdk-1.6.0_45-fcs.x86_64

# rpm -Uvh ./*.rpm
Preparing...                ########################################### [100%]
    package jdk-2000:1.6.0_45-fcs.x86_64 is already installed
# rpm -Uvh sun-javadb-*.rpm
 [I omit the feedback because it generates a formatting error]
#

但是,Java 版本只显示 1.7 # java -version java version "1.7.0_25" OpenJDK Runtime Environment (rhel-2.3.10.4.el6_4-x86_64) OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

换句话说,我期待 Oracle 文件在某处为我提供一些新的 /java 目录,其中包含一个新的 java 可执行文件,它将为“java -version”返回不同的答案

我需要那个新目录,以便我可以设置 JAVA_HOME 并使用 1.6 版本的 Java。

有用的建议将不胜感激。提前致谢。

4

5 回答 5

16

Oracle JDK RPM 很糟糕。

  • 他们没有在替代系统中注册。
  • 他们不提供(以 RPM 术语)“java”
  • 他们弄乱了他们的 RPM '版本字符串'并依赖于 Epoch (...)
  • JDK 的所有版本(即 1.6 与 1.7)都具有相同的 Epoch

为了快速解决您的问题,您可以运行以下命令:

/usr/sbin/alternatives --install /usr/bin/java java /usr/java/default/bin/java 20000

它将注册并首选 Oracle java 安装作为替代。OpenJDK 的权重为 16000;在这里,我们使用 20000 注册。运行此命令后,您可以使用(已经提到的)alternatives --config java命令在 java 版本之间切换。

至于不太快速的修复,您可以使用我的虚拟 java 包。它很可能并不完美(我愿意改进;)),但它提供了java(让我的 apache-tomcat 包开心)并在替代系统中注册。这个虚拟包只依赖于jdk ...你可以在这里找到它:https ://github.com/keystep/virtual-java-rpm

于 2013-10-22T12:27:55.230 回答
6

运行以下命令以查看您的 JVM 是否已列出。

sudo update-alternatives --config java

如果您的 JVM 被列出,请选择它。

于 2013-10-22T10:02:50.067 回答
1

请检查您的 JAVA_HOME 是否使用 echo 指向 JDK 6 $JAVA_HOME。为了将您更改JAVA_VERSION为 Java 6,您需要指向 Java 开发工具包 6。您还需要将 bin 目录添加到$PATH变量中。请确保 JDK6 bin 目录位于其他 JDK bin 之前的 $PATH(如果有)。您可以通过命令检查环境中Java的版本java -version。learningloop的另一个答案非常适合在不同的Java配置之间切换

于 2013-10-22T10:04:31.957 回答
0

问题是 Oracle 的 RPM (故意 IMO!)对“替代”系统一无所知。

相反,他们将东西安装在非标准位置(/usr/java),然后期望用户/系统管理员手动弄乱 PATH 变量。

这是一个麻烦!


因此,在您的情况下可能发生的情况是您的 JDK / JRE 已安装在 /usr/java 的子目录中……但是由于您尚未将相关bin子目录添加到您的前面,因此您PATH仍在选择 OpenJDK工具通过java命令名称。


您可以在事后通过使用“替代方案”进行配置,然后选择 Oracle 命令来解决此问题。但这很麻烦,尤其是如果您还需要 JDK 工具的话。(有很多!)

如果您使用 Chef,另一种方法是使用“java”说明书进行安装。

于 2013-10-22T10:16:46.673 回答
0

试试下面的方法

删除 OpenJDK 文件夹

/usr/lib/jvm

我有同样的问题并通过这种方法得到了解决方案

于 2016-10-05T08:27:09.830 回答