使用alternatives替换jdk的版本

在centos安装jenkins时需要使用service jenkins start命令来启动。但运行这个命令时会报错,提示安装的jdk版本太低。

[root@rabbit-03-05 alternatives]# service jenkins start
Starting Jenkins Jenkins requires Java5 or later, but you are running 1.4.2 from /usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre
java.lang.UnsupportedClassVersionError: 48.0
   at Main.main(Main.java:90)
                                                           [  OK  ]

但命令行中运行java -version却显示的是1.7.0版本。

[root@rabbit-03-05 alternatives]# java -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)

研究了一下终于找到解决办法了,即通过alternatives工具替换centos默认安装的jdk。

先简单介绍一下什么是alternative工具:

[root@rabbit-03-05 alternatives]# which alternatives
/usr/sbin/alternatives
[root@rabbit-03-05 alternatives]# alternatives 
alternatives version 1.3.30.2 - Copyright (C) 2001 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License.

usage: alternatives --install <link> <name> <path> <priority>
                    [--initscript <service>]
                    [--slave <link> <name> <path>]*
       alternatives --remove <name> <path>
       alternatives --auto <name>
       alternatives --config <name>
       alternatives --display <name>
       alternatives --set <name> <path>

common options: --verbose --test --help --usage --version
                --altdir <directory> --admindir <directory>

OK,信息足够多了,下面使用alternatives把jdk换掉。先解压从网上下载的jdk1.7.0u5,放在/usr/lib/jvm/jdk1.7.0_05,然后看看安装前的信息:

[root@rabbit-03-05 jdk1.7.0_05]# alternatives --display java
java - status is auto.
 link currently points to /usr/lib/jvm/jre-1.4.2-gcj/bin/java
/usr/lib/jvm/jre-1.4.2-gcj/bin/java - priority 1420
 slave jre: /usr/lib/jvm/jre-1.4.2-gcj
 slave jre_exports: /usr/lib/jvm-exports/jre-1.4.2-gcj
 slave keytool: /usr/lib/jvm/jre-1.4.2-gcj/bin/keytool
 slave rmiregistry: /usr/lib/jvm/jre-1.4.2-gcj/bin/rmiregistry
Current `best' version is /usr/lib/jvm/jre-1.4.2-gcj/bin/java.

然后运行下面两条命令

[root@rabbit-03-05 jdk1.7.0_05]# alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_05/bin/java 300
[root@rabbit-03-05 jdk1.7.0_05]# alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_05/bin/javac 300

再运行display命令后,看到显示结果已经发生了变化:

[root@rabbit-03-05 jdk1.7.0_05]# alternatives --display java
java - status is auto.
 link currently points to /usr/lib/jvm/jre-1.4.2-gcj/bin/java
/usr/lib/jvm/jre-1.4.2-gcj/bin/java - priority 1420
 slave keytool: /usr/lib/jvm/jre-1.4.2-gcj/bin/keytool
 slave rmiregistry: /usr/lib/jvm/jre-1.4.2-gcj/bin/rmiregistry
 slave jre_exports: /usr/lib/jvm-exports/jre-1.4.2-gcj
 slave jre: /usr/lib/jvm/jre-1.4.2-gcj
/usr/lib/jvm/jdk1.7.0_05/bin/java - priority 300
 slave keytool: (null)
 slave rmiregistry: (null)
 slave jre_exports: (null)
 slave jre: (null)
Current `best' version is /usr/lib/jvm/jre-1.4.2-gcj/bin/java.
[root@rabbit-03-05 jdk1.7.0_05]# alternatives --display javac
javac - status is auto.
 link currently points to /usr/lib/jvm/java-1.4.2-gcj/bin/javac
/usr/lib/jvm/java-1.4.2-gcj/bin/javac - priority 1420
 slave jar: /usr/lib/jvm/java-1.4.2-gcj/bin/jar
 slave jarsigner: /usr/lib/jvm/java-1.4.2-gcj/bin/jarsigner
 slave javadoc: /usr/lib/jvm/java-1.4.2-gcj/bin/javadoc
 slave javah: /usr/lib/jvm/java-1.4.2-gcj/bin/javah
 slave rmic: /usr/lib/jvm/java-1.4.2-gcj/bin/rmic
 slave java_sdk_exports: /usr/lib/jvm-exports/java-1.4.2-gcj
 slave java_sdk: /usr/lib/jvm/java-1.4.2-gcj
/usr/lib/jvm/jdk1.7.0_05/bin/javac - priority 300
 slave jar: (null)
 slave jarsigner: (null)
 slave javadoc: (null)
 slave javah: (null)
 slave rmic: (null)
 slave java_sdk_exports: (null)
 slave java_sdk: (null)
Current `best' version is /usr/lib/jvm/java-1.4.2-gcj/bin/javac.

现在可以把配置替换到新的jdk上去了,运行alternatives --config <name>

[root@rabbit-03-05 jdk1.7.0_05]# alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.4.2-gcj/bin/java
   2           /usr/lib/jvm/jdk1.7.0_05/bin/java

Enter to keep the current selection[+], or type selection number: 2
[root@rabbit-03-05 jdk1.7.0_05]# alternatives --config javac

There are 2 programs which provide 'javac'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/java-1.4.2-gcj/bin/javac
   2           /usr/lib/jvm/jdk1.7.0_05/bin/javac

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

运行完毕后,新的jdk就切换到1.7上了,运行命令

[root@rabbit-03-05 jdk1.7.0_05]# service jenkins start
Starting Jenkins                                           [  OK  ]

完毕。

posted @ 2013-05-07 13:49  clivelee  阅读(757)  评论(0编辑  收藏  举报