更新: 现在 CentOS 7 下默认 repo 已经有 openjdk 1.6, 1.7, 1.8 三个选项了, 若无所谓 oraclejdk 和 openjdk 的区别, 我们可以直接安装 openjdk 命令如下:
yum install java-1.8.0-openjdk -y
要是还需要用它的头文件和库, 可以再来句
yum install java-1.8.0-openjdk-{devel,headless} -y
以后跟着 yum update 一起更新, 也是极好的.

CentOS 7 下目前默认是 jdk1.6 和 1.7。若需要更高版本的1.8,我们就需要一点额外的手段了。

首先,我们需要从这个页面下个最新版本的 jdk. Oracle 提供 rpm 包和tar.gz 包. 为了省事, 我们直接下载个 rpm 包完事.

若远程直接用 wget 下载, 有时候有一点问题, 需要加点参数来帮忙. 参考此处.

下载完成后,可以用 rpm 命令安装,不过本懒人记不住那么多命令, 更喜欢用 yum 搞定。

# yum localinstall jdk-8u20-linux-x64.rpm -y
...
Resolving Dependencies
--> Running transaction check
---> Package jdk1.8.0_20.x86_64 2000:1.8.0_20-fcs will be installed
--> Finished Dependency Resolution
...
Installed:
  jdk1.8.0_20.x86_64 2000:1.8.0_20-fcs

Complete!

安装完毕后, 为了节省空间, rpm 包也可以删除了.

这套 jdk 其实是在 /usr/java 目录下配置了一套环境。查看此目录,我们可以看到目录下多了个 jdk1.8.0_20,同时用软链链接到了default和last两个目录下.

$ ls -al /usr/java
total 12
drwxr-xr-x.  3 root root 4096 Oct 13 22:10 .
drwxr-xr-x. 15 root root 4096 Jul 31 04:27 ..
lrwxrwxrwx.  1 root root   16 Oct 13 22:10 default -> /usr/java/latest
drwxr-xr-x.  9 root root 4096 Oct 13 22:10 jdk1.8.0_20
lrwxrwxrwx.  1 root root   21 Oct 13 22:10 latest -> /usr/java/jdk1.8.0_20

但到目前为止它并没有被实际使用.我们需要通过alternative工具来管理.

因为软链接的原因,若我们将此次配置的内容指向 /usr/java/default/bin/xxx , 以后安装 jdk 1.9 乃至 2.0 的话, 只要直接修改下软链接即可,而不必再这么搞一遍. 因此下面我将使用 /usr/java/default/ 为新的 java home。

但是,偶然路过的你,若并不打算这么搞,而是希望指定使用 jdk1.8.0_20 这个版本而不希望有改变,请自行将 default 替换为 jdk1.8.0_20。下面类似情况皆是如此,敬请注意。

首先,我们先查看下当前的 alternative 环境.

# alternatives --config java

There is 1 program that provides 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el7_0.x86_64/jre/bin/java

Enter to keep the current selection[+], or type selection number: ^C

我们注意到, alternatives 中已经有了一个 java, 而我们的目标就是在不破坏原来环境的情况下增加的一个 1.8. 当然,一切完毕后,诸位也可以试着自行删掉rpm包安装的那份.

我们首先将 java 加入 alternative

# alternatives --install /usr/bin/java java /usr/java/default/bin/java 2

几个参数都比较好懂, 就是将可执行文件 /usr/java/default/bin/java 软链接到 /usr/bin/java, 配置名为 java, 最后一个参数 2 是因为我们之前就看到, 我们已经有了一个 java 了, 所以 index 选择为 2.

然后继续配置

# alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el7_0.x86_64/jre/bin/java
   2           /usr/java/default/bin/java

Enter to keep the current selection[+], or type selection number: 2

我们发现多出来了一个选择,指向我们新安装的 /usr/java/defalut/bin/java。选择该命令即可。

再去查看:

# alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*  1           /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el7_0.x86_64/jre/bin/java
 + 2           /usr/java/default/bin/java

Enter to keep the current selection[+], or type selection number: 2

我们发现 + 号已经移到了下面.

同样的, 我们再配置下剩余的

# alternatives --install /usr/bin/jar jar /usr/java/default/bin/jar 2
# alternatives --install /usr/bin/javac javac /usr/java/default/bin/javac 2
# alternatives --set jar /usr/java/default/bin/jar
# alternatives --set javac /usr/java/default/bin/javac

这样就搞定了.

最后, 我们可以验证下:

$ java -version
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)
$ javac -version
javac 1.8.0_20

最后,我们可能需要配置一下环境变量。

环境变量普通用户下配置即可。

可以直接写

$ export JAVA_HOME=/usr/java/default

以及其他 blahblah。

不过,我们也可以将其写入配置文件。具体根据使用 shell 而定。若使用的是 bash, 可以在 ~/.bashrc 或者 ~/.bash_profile 中添加内容如下:

export JAVA_HOME=/usr/java/default
export JRE_HOME=/usr/java/default/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

对 Ubuntu 用户

Ubuntu 没有 alternatives 命令,只有 update-alternatives 和 update-java-alternatives。

update-alternatives 方法和上面类似。

update-java-alternatives 是同时设置 jre, jdk 一个包。

$ sudo  update-java-alternatives -l
java-1.11.0-openjdk-amd64      1101       /usr/lib/jvm/java-1.11.0-openjdk-amd64
java-1.8.0-openjdk-amd64       1081       /usr/lib/jvm/java-1.8.0-openjdk-amd64
$ sudo update-java-alternatives -s java-1.8.0-openjdk-amd64
update-alternatives: error: no alternatives for jaotc
update-alternatives: error: no alternatives for jdeprscan
update-alternatives: error: no alternatives for jhsdb
update-alternatives: error: no alternatives for jimage
update-alternatives: error: no alternatives for jlink
update-alternatives: error: no alternatives for jmod
update-alternatives: error: no alternatives for jshell
update-alternatives: error: no alternatives for mozilla-javaplugin.so
update-java-alternatives: plugin alternative does not exist: /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/IcedTeaPlugin.so

参考:


Yu

Ideals are like the stars: we never reach them, but like the mariners of the sea, we chart our course by them.

6 Comments

youran · October 21, 2014 at 20:21

Google Chrome 38.0.2125.104 Google Chrome 38.0.2125.104 Mac OS X  10.9.5 Mac OS X 10.9.5

http://www.v2ex.com/t/139400
最近有个Wildcard SSL证书大优惠,有兴趣的话可以去搞个。我准备买个试试,反正也不贵

    yu · October 21, 2014 at 22:46

    Google Chrome 38.0.2125.104 Google Chrome 38.0.2125.104 Mac OS X  10.10.0 Mac OS X 10.10.0

    @youran 多谢提醒,你之前说的那个StartSSL我死活审核不过 … 囧

      youran · October 24, 2014 at 01:10

      Google Chrome 38.0.2125.104 Google Chrome 38.0.2125.104 Mac OS X  10.9.5 Mac OS X 10.9.5

      @Yu Jing 我的泛域名证书已经下来了,找个时间装上,嘿嘿

        yu · October 24, 2014 at 16:19

        Google Chrome 38.0.2125.104 Google Chrome 38.0.2125.104 Mac OS X  10.10.0 Mac OS X 10.10.0

        @youran 补充https://ssl.argcv.com上先配了个试试,幸好是sha256的,只是里面的信息基本是乱填也真是无语了…
        我打算过几天用个试试

          youran · October 24, 2014 at 20:39

          Google Chrome 38.0.2125.104 Google Chrome 38.0.2125.104 Mac OS X  10.9.5 Mac OS X 10.9.5

          @Yu Jing Firefox提示证书错误。忘了把intermediate ca (AplhaSSL的那个)的证书整合进去了?

            yu · October 24, 2014 at 22:41

            Google Chrome 38.0.2125.104 Google Chrome 38.0.2125.104 Mac OS X  10.10.0 Mac OS X 10.10.0

            @youran 额…多谢提醒,好久不用FF了…

Leave a Reply to yu Cancel reply

Your email address will not be published. Required fields are marked *