我需要在/opt/java1.7
目录中安装Java 1.7 OpenJDK。
当我运行whereis java
时,它仍会显示已安装在/usr/bin/java
中,我需要它/opt/java1.7/
。
答案 0 :(得分:0)
让系统的软件包管理器(yum
,apt-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 位置。