Linux 下安装 sun/oracle 的 jdk

Linux 自带的 jdk 是 openjdk,但是 sun/oracle 的 jdk 更加常用一些,据说 bug 也更少。所以下面就是卸载 openjdk 安装 sun/oralce jdk 的一个教程。

检查 OpenJDK 是否已经安装

rpm -q < rpm package name> 用来查询一个包是否被安装,而 rpm -qa 则列出了所有被安装的 rpm 包

1
2
3
4
$ rpm -qa | grep java  
tzdata-java-2013b-1.el6.noarch
java-1.6.0-openjdk-1.6.0.0-1.61.1.11.11.el6_4.x86_64
java-1.7.0-openjdk-1.7.0.19-2.3.9.1.el6_4.x86_64

检查 OpenJDK 版本

1
2
3
4
$ java -version  
java version "1.7.0_19"
OpenJDK Runtime Environment (rhel-2.3.9.1.el6_4-x86_64)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

卸载 Openjdk

用 root 用户登录终端,rpm -e --nodeps 表示强制卸载某个 rpm 包,因为采用 rpm -e 删除时有时会出现... is needed by ... 的依赖提示而不能卸载这个包

1
2
3
$ rpm -e --nodeps java-1.7.0-openjdk-1.7.0.19-2.3.9.1.el6_4.x86_64  
$ rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.61.1.11.11.el6_4.x86_64
$ rpm -e --nodeps tzdata-java-2013b-1.el6.noarch

下载并安装 jdk-7u17-linux-x64.rpm

下载地址:http://pan.baidu.com/share/link?shareid=397488&uk=638583574,rpm -ivh <rpm package> 为安装某个 rpm 包的命令,参数 ivh 各自的意义如下所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

-i, --install install package(s)
-v, --verbose provide more detailed output
-h, --hash print hash marks as package installs (good with -v)
```
而`rpm -Uvh`则表示升级一个软件包

```
$ cd /jdk1.7所在目录
$ rpm -ivh jdk-7u17-linux-x64.rpm
Preparing... ########################################### [100%]
1:jdk ########################################### [100%]
Unpacking JAR files...
rt.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_17/jre/lib/rt.pack
jsse.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_17/jre/lib/jsse.pack
charsets.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_17/jre/lib/charsets.pack
tools.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_17/lib/tools.pack
localedata.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_17/jre/lib/ext/localedata.pack
以上那些错误可以忽略,不影响jdk到安装和使用

配置环境变量

这是很关键的一步,jdk 使用过程中绝大部分问题都跟环境变量的配置有关,需要配置的变量有 JAVA_HOMEPATHCLASSPATH, 其中 JAVA_HOME 表示 Java 的安装目录,PATH 是为了让系统在任何路径下都可以识别出 java 的命令,CLASSPATH 则指定 Java 运行时查找 class 文件的路径,尤其需要注意 CLASSPATH 需要包含当前目录,也就是.,而且还要包含工具类库 tool.jar;如果需要 Swing 包,还可以添加 dt.jar。所以上面这三个变量的最简配置如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$vi /etc/profile #在最后加入以下内容:  
JAVA_HOME=/usr/java/jdk1.7.0_17
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH
```
使环境变量立即生效
```
$source /etc/profile
```
## 测试安装是否成功
依次输入`java,java -version,javac`,看到输出信息即可,例如
```
# java -version
java version "1.7.0_17"
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)