使用 rpm 在 linux (fedora 16) 上并排安装 sun java 6 和 sun java 7

alf*_*205 8 linux java rpm sun-java6-jdk fedora-16

这是我想要实现的目标,但我失败了(我是 Linux 新手)。

我有一个 Fedora 16 机器(64 位)并且想安装多个版本的 oracle java(目前是 java 6 和 java 7)。我正在尝试使用 rpm 软件安装 java,我想将它们都安装在/opt.

我从 Oracle 站点下载了所需的软件包:

jdk-6u30-linux-x64-rpm.bin
jdk-7u2-linux-x64.rpm
Run Code Online (Sandbox Code Playgroud)

并从.bin运行的文件中提取 rpm 包

./jdk-6u30-linux-x64-rpm.bin -x
Run Code Online (Sandbox Code Playgroud)

获得以下情况:

jdk-6u30-linux-amd64.rpm
jdk-7u2-linux-x64.rpm
Run Code Online (Sandbox Code Playgroud)

然后我看了看里面jdk-6u30-linux-amd64.rpm

rpm -qpl ~/Downloads/jdk-7u2-linux-x64.rpm
Run Code Online (Sandbox Code Playgroud)

并获得 java 6 将其文件安装到:

/etc                   (some files)
/usr/java/jdk1.6.0\_30 (the majority of the files)
Run Code Online (Sandbox Code Playgroud)

以类似的方式,java 7 将安装到:

/etc
/usr/java/jdk1.7.0\_02
Run Code Online (Sandbox Code Playgroud)

因为我想安装到/opt我尝试使用rpm relocation安装。这两个包似乎都是 rpm 可重定位的,实际上:

rpm -qpi ~/Downloads/jdk-6u30-linux-amd64.rpm | grep -i reloc
Run Code Online (Sandbox Code Playgroud)

结果给出

Relocations : /usr/java
Run Code Online (Sandbox Code Playgroud)

rpm -qpi ~/Downloads/jdk-7u2-linux-x64.rpm | grep -i reloc
Run Code Online (Sandbox Code Playgroud)

结果给出

Relocations : /usr/java
Run Code Online (Sandbox Code Playgroud)

尝试 1(先安装 java 6,然后安装 java 7)

sudo rpm -i --relocate /usr/java=/opt/java ~/Downloads/jdk-6u30-linux-amd64.rpm
Run Code Online (Sandbox Code Playgroud)

这运行几乎顺利,因为 rpm 说

ln: failed to create symbolic link '/usr/java/jdk1.6.0\_30': No such file or directory`

rpm -q jdk
Run Code Online (Sandbox Code Playgroud)

jdk-1.6.0\_30-fcs.x86\_64_ ... OK!
Run Code Online (Sandbox Code Playgroud)

然后

sudo rpm -i --relocate /usr/java=/opt/java ~/Downloads/jdk-7u2-linux-x64.rpm
Run Code Online (Sandbox Code Playgroud)

非常失败 说:

file /etc/init.d/jexec from install of
jdk-2000:1.7.0\_02-fcs.x86\_64*     conflicts with file from package
jdk-2000:1.6.0\_30-fcs.x86\_64*
Run Code Online (Sandbox Code Playgroud)

尝试 2(先安装 java 7,然后安装 java 6)

尚未安装 java 6 我将首先删除它:

sudo rpm -e jdk*
sudo rpm -q jdk*
Run Code Online (Sandbox Code Playgroud)

给出:

package jdk is not installed* <- OK, uninstalled!
Run Code Online (Sandbox Code Playgroud)

然后让我们尝试安装 java 7

sudo rpm -i --relocate /usr/java=/opt/java ~/Downloads/jdk-7u2-linux-x64.rpm*
Run Code Online (Sandbox Code Playgroud)

给出了通常的错误:

ln: failed to create symbolic link '/usr/java/jdk1.7.0_02': No such file or directory`*
Run Code Online (Sandbox Code Playgroud)

现在Java 6

sudo rpm -i --relocate /usr/java=/opt/java ~/Downloads/jdk-6u30-linux-amd64.rpm*
Run Code Online (Sandbox Code Playgroud)

没有说两件事:

package jdk-2000:1.7.0\_02-fcs.x86\_64 (which is newer than jdk-2000:1.6.0\_30-fcs.x86\_64) is already installed*
Run Code Online (Sandbox Code Playgroud)

file /etc/init.d/jexec from install of jdk-2000:1.6.0\_30-fcs.x86\_64
conflicts with file from package jdk-2000:1.7.0\_02-fcs.x86\_64*
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 符号链接创建问题:有办法解决吗?安装过程似乎没有意识到我尝试使用重定位机制,即使包是可重定位的(据我所知)
  2. 我在安装过程中遗漏了什么吗?真的有可能在同一台 Linux 机器上同时拥有 java 6 和 java 7 吗?如何?我究竟做错了什么?
  3. 还有其他方法可以实现我的目标吗?

PS:这是我在这里的第一个问题。如果有什么问题(从我的英语到格式和任何东西),我提前道歉 PS2:我试图将标签sun-java7-jdk 添加到这个问题,但我没有足够的声誉来做到这一点......如果这个标签被创造?

小智 14

这是更简单的方法,当您收到此错误时:

package jdk.... (which is newer than jdk...) is already installed
Run Code Online (Sandbox Code Playgroud)

使用该--force标志安装多个版本。

例如:

sudo rpm -ivh --force jdk-6u35-linux-amd64.rpm
Run Code Online (Sandbox Code Playgroud)


小智 3

我在让 Oracle java 和 OpenJDK 在 Fedora 16 上并存时遇到了类似的问题。我遵循了If not True then False 的指南,它运行得很好。

  • 您能在这里总结一下这篇文章吗?我们希望您不要只在此处链接文章。 (5认同)