为什么/ usr / bin / java链接到/ usr / java / default / bin / java?

时间:2016-03-31 01:12:49

标签: java linux alternate

我正在尝试使用java alternatives1.6降级到java 1.8。但是,尽管通过--set在备选方案中正确设置了该版本,但java版本仍会返回1.8

  Selection    Command
-----------------------------------------------
*+ 1           /usr/java/jre1.6.0_37/bin/java
   2           /usr/java/jre1.8.0_66/bin/java

java -version
java version "1.8.0_66"

仔细观察后发现/usr/bin/java总是指向最新版本,因为:

ls -la /usr/bin/java 
lrwxrwxrwx 1 root root 26 Mar 31 11:27 /usr/bin/java -> /usr/java/default/bin/java

ls -la /usr/java/
total 20
drwxr-xr-x  4 root root 4096 Mar 31 11:30 .
drwxr-xr-x 16 root root 4096 Oct  7 11:41 ..
lrwxrwxrwx  1 root root   16 Mar 31 11:27 default -> /usr/java/latest
drwxr-xr-x  7 root root 4096 Mar 31 11:27 jre1.6.0_37
drwxr-xr-x  7 root root 4096 Mar 31 11:30 jre1.8.0_66
lrwxrwxrwx  1 root root   21 Mar 31 11:30 latest -> /usr/java/jre1.8.0_66

我在2个独立的RHEL 5.10 / 11系统上体验过这个。在尝试在CentOS上复制此内容时,我注意到/usr/bin/java链接到/etc/alternatives/java

回到我的RHEL系统,查看了/etc/alternatives/java

ls -la /etc/alternatives/
total 24
drwxr-xr-x  2 root root  4096 Mar 31 12:02 .
drwxr-xr-x 78 root root 12288 Sep 25  2012 ..
lrwxrwxrwx  1 root root    30 Mar 31 12:02 java -> /usr/java/jre1.6.0_37/bin/java

正如预期的那样,它链接到正确的版本,这意味着/usr/bin/java应该链接到/etc/alternatives/java

为什么这不是默认行为?是否只需将符号链接更改为' / etc / alternatives / java'管理降级?

1 个答案:

答案 0 :(得分:0)

RPM包会创建两个链接:/usr/java/latest/usr/java/default

  1. /usr/java/latest链接始终指向被视为最新版本的Java版本。如果不是最新版本,软件包的后续升级将覆盖此值。

  2. 默认情况下,/usr/java/default指向/usr/java/latest。但是,如果管理员将/usr/java/default更改为指向另一版本的Java,则管理员将提供后续的软件包升级,并且不能覆盖。

  3. 关于RHEL的替代方案,请遵循以下内容:

    How to use alternatives for setting default JDK?

    你有没有看过这个? Problem changing Java version using alternatives