在另一个目录中安装Java 1.7 OpenJDK

时间:2016-01-15 21:01:22

标签: java linux installation rpm

我需要在/opt/java1.7目录中安装Java 1.7 OpenJDK。

当我运行whereis java时,它仍会显示已安装在/usr/bin/java中,我需要它/opt/java1.7/

2 个答案:

答案 0 :(得分:0)

让系统的软件包管理器(yumapt-get;假设您正在运行某些Linux发行版)将其安装在默认位置。

然后用:

创建一个符号链接
sudo ln -s /usr/lib/jvm/java-7-openjdk-amd64 /opt/java1.7

(使用您在问题评论中指明的路径)。

答案 1 :(得分:0)

OP没有提到的基本问题是Java7被认为是过时的; Java8自去年春天以来一直是最新的。因此,在后台我们可能会假设OP希望将Java7放在以给定版本命名的/opt下的目录中。

如果OpenJDK包是可重定位的,那就太好了。这里和那里提到了可重定位包的可能性:

不是:我很好奇,并尝试使用--installroot的{​​{1}}选项("相同"作为dnf,但同样,后者已被弃用在Fedora22上。

如果在已有Java8的系统上安装Java7,则包系统可能会更改yum和/或/usr/bin/java的符号链接以指向最新的Java安装。

除此之外,您可能希望安装OpenJDK的各种系统都打包它以避免冲突。

例如,使用Fedora,包/etc/alternatives/java包含Java7的JRE。 (如果您需要开发包,那将是java-1.7.0-openjdk-headless):

根据建议,可以创建从java-1.7.0-openjdk-devel到Java所在/opt中的位置的符号链接。您的/usr/lib/jvm必须有PATH和/或/opt/java1.7/bin,具体取决于您是否需要开发包或运行时包。

您不应该以消除/opt/java1.7/jre/bin叶子的方式构造符号链接。原因是可执行文件是使用 rpath 选项构建的,因此链接器可以根据可执行文件的位置找到所需的Java共享库。顺便说一下,这就是为什么符号链接有效。对/bin可执行文件执行objdump -axh会显示(除此之外)类似这样的内容:

java

由于 rpath 的使用,可以移动整个目录从Dynamic Section: NEEDED libpthread.so.0 NEEDED libz.so.1 NEEDED libjli.so NEEDED libdl.so.2 NEEDED libc.so.6 SONAME lib.so RPATH $ORIGIN/../lib/amd64/jli:$ORIGIN/../lib/amd64 /usr/lib/jvm并将其重命名为地点。这样做有一个缺点,即软件包更新不起作用,但它会成功安装"安装" 中的Java7 位置。