【问题标题】:I had Open JDK 1.7 on CentOS; I installed Oracle's Java rpm; Oracle Java doesn't seem to exist我在 CentOS 上安装了 Open JDK 1.7;我安装了 Oracle 的 Java rpm; Oracle Java 似乎不存在
【发布时间】:2013-10-31 02:56:55
【问题描述】:

我从 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 -版本 java版本“1.7.0_25” OpenJDK 运行时环境 (rhel-2.3.10.4.el6_4-x86_64) OpenJDK 64 位服务器 VM(内部版本 23.7-b01,混合模式)

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

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

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

【问题讨论】:

  • 新目录位于 /usr/java 下;准确地说,它曾经是现在是:/usr/java/jdk1.6.0_45/bin

标签: java linux oracle centos rpm


【解决方案1】:

Oracle JDK RPM 很糟糕。

  • 他们没有在 alternatives 系统中注册。
  • 他们不提供(以 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

【讨论】:

  • 谢谢。我将在您的 github 上查看另一台机器;当前机器属于其他人,并且所有者希望它符合供应商的 Oracle 准则。
  • 不客气!替代命令应该给你你需要的东西。需要说明的是:virtual-java 包只是一个元数据(“虚拟”)包——它不会修改 Oracle RPM 的任何行为,只是添加了一些缺失的位以更好地集成系统;)顺便说一下,关于接受的答案:我没有时间验证,但我很确定 Oracle RPM 设置了 /usr/bin/java 符号链接,但因为它没有向 alternatives 注册 这取决于安装顺序。如果您安装 Oracle JDK,然后安装/更新 OpenJDK,则符号链接将被替换。
  • 非常感谢您提供的信息和指导。这太可怕了。如果我需要从 jdk6 安装到 jdk11。最好的方法是什么?
  • @ChamindaBandara 我猜你现在已经找到了一个方法,但我的第一个问题是:你还需要 JDK6 吗?只是删除它可能是最好的前进方式! :D
  • 感谢您的回复,我找到了解决方案。安装它的原因是我们的开发团队要求,这就是为什么...
【解决方案2】:

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

sudo update-alternatives --config java

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

【讨论】:

  • 这是一个很棒的命令,我肯定会在不久的将来将它用于其他目的。谢谢你。就我的直接目的而言,最好将 JAVA_HOME 设置为 /usr/java/jdk1.6.0_45/bin 只是为了让当前应用程序执行供应商期望的操作。
【解决方案3】:

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

【讨论】:

  • 谢谢。 $PATH 变量将是我今天的第一个任务。
【解决方案4】:

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

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

真是麻烦!


所以在您的情况下可能发生的情况是您的 JDK / JRE 已安装在 /usr/java 的子目录中......但是由于您尚未将相关的 bin 子目录添加到您的 @ 前面987654322@ 你还在通过java 命令名来使用 OpenJDK 工具。


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

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

【讨论】:

  • 这是最好的答案,尽管解释 RedHat“替代品”的答案非常有用。
【解决方案5】:

试试下面的方法

从中删除 OpenJDK 文件夹

/usr/lib/jvm

我遇到了同样的问题,通过这个方法得到了解决

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 2013-04-19
    • 2021-02-12
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    相关资源
    最近更新 更多