使用linux的alternatives管理多版本的软件
今天捣鼓Oracle的OS Watcher(简称osw) 的时候发现机器上的jdk不太好使,不能运行osw的oswg.jar。比较郁闷,看了一下 /usr/bin/java 是连接到 /etc/alternatives/java ,而 /etc/alternatives/java 是连接到 /usr/lib/jvm/jre-1.4.2-gcj/bin/java ,
1 [root@test03 bin]# ll /usr/bin/java
2 lrwxrwxrwx 1 root root 22 Dec 17 2009 /usr/bin/java -> /etc/alternatives/java
3 [root@test03 bin]# ll /etc/alternatives/java
4 lrwxrwxrwx 1 root root 35 Aug 23 14:52 /etc/alternatives/java -> /usr/lib/jvm/jre-1.4.2-gcj/bin/java
发现这个 alternatives 很眼生,于是 google 了一下,发现它是一个管理多版本软件的软件,于是借着升级jdk、jre的契机顺便捣鼓一下这个alternatives 。
首先到Oracle的网站下载最新的 jdk 和 jre ,然后安装。这个安装比较恶心,装在什么地方也不说一声,害我找了半天才发现装在 /usr/java/jdk1.6.0_21/ 和 /usr/java/jre1.6.0_21/ 这两个目录中。
将jdk和jre的java注册到alternatives中,顺便也将jdk的javac注册到alternatives中。
1 [root@test03 ~]# alternatives --install /usr/bin/java java /usr/java/jre1.6.0_21/bin/java 400
2 [root@test03 ~]# alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_21/bin/java 400
3 [root@test03 ~]# alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_21/bin/javac 400
现在可以看看注册的成果了:
01 [root@test03 ~]# alternatives --config java
02
03 There are 3 programs which provide 'java'.
04
05 Selection Command
06 -----------------------------------------------
07 *+ 1 /usr/lib/jvm/jre-1.4.2-gcj/bin/java
08 2 /usr/java/jre1.6.0_21/bin/java
09 3 /usr/java/jdk1.6.0_21/bin/java
10
11 Enter to keep the current selection[+], or type selection number:
这里输入想要用的 java 就可以了,例如我选在了第2个。我们看看 /usr/bin/java的变化:
1 [root@test03 ~]# ll /usr/bin/java
2 lrwxrwxrwx 1 root root 22 Dec 17 2009 /usr/bin/java -> /etc/alternatives/java
3 [root@test03 ~]# ll /etc/alternatives/java
4 lrwxrwxrwx 1 root root 30 Aug 23 15:03 /etc/alternatives/java -> /usr/java/jre1.6.0_21/bin/java
可以看到 /usr/bin/java 的连接的地方没有变,改变了的/etc/alternatives/java 的连接,这其实是一个策略模式的实现:
/usr/bin/java 的“调用”没有变,还是连接到 /etc/alternatives/java,/etc/alternatives/java的连接却被修改了,这个由 alternatives 管理。
通过linux的连接也可以简单地实现这种“接口”和“具体实现”的分离,但是 alternatives 提供一个配置清单,简单选一下就OK了,这为我们提供了很大的便利。
扩充一下,alternatives也可以管理我们自己的软件。例如,我自己写了个软件叫myjava,我也想实现这种基于“策略模式”的版本管理,我可以这样做:
1 alternatives --install /usr/bin/myjava myjava /usr/java/jdk1.6.0_21/bin/java 300
2 alternatives --install /usr/bin/myjava myjava /usr/java/jre1.6.0_21/bin/java 300
使用 alternatives 更换一下我的版本:
01 [root@test03 ~]# ll /usr/bin/myjava
02 lrwxrwxrwx 1 root root 24 Aug 23 14:43 /usr/bin/myjava -> /etc/alternatives/myjava
03 [root@test03 ~]# ll /etc/alternatives/myjava
04 lrwxrwxrwx 1 root root 30 Aug 23 14:46 /etc/alternatives/myjava -> /usr/java/jre1.6.0_21/bin/java
05 [root@test03 ~]#
06 [root@test03 ~]#
07 [root@test03 ~]# alternatives --config myjava
08
09 There are 2 programs which provide 'myjava'.
10
11 Selection Command
12 -----------------------------------------------
13 * 1 /usr/java/jdk1.6.0_21/bin/java
14 + 2 /usr/java/jre1.6.0_21/bin/java
15
16 Enter to keep the current selection[+], or type selection number: 1
17 [root@test03 ~]#
18 [root@test03 ~]#
19 [root@test03 ~]# ll /usr/bin/myjava
20 lrwxrwxrwx 1 root root 24 Aug 23 14:43 /usr/bin/myjava -> /etc/alternatives/myjava
21 [root@test03 ~]# ll /etc/alternatives/myjava
22 lrwxrwxrwx 1 root root 30 Aug 23 15:15 /etc/alternatives/myjava -> /usr/java/jdk1.6.0_21/bin/java
1 [root@test03 bin]# ll /usr/bin/java
2 lrwxrwxrwx 1 root root 22 Dec 17 2009 /usr/bin/java -> /etc/alternatives/java
3 [root@test03 bin]# ll /etc/alternatives/java
4 lrwxrwxrwx 1 root root 35 Aug 23 14:52 /etc/alternatives/java -> /usr/lib/jvm/jre-1.4.2-gcj/bin/java
发现这个 alternatives 很眼生,于是 google 了一下,发现它是一个管理多版本软件的软件,于是借着升级jdk、jre的契机顺便捣鼓一下这个alternatives 。
首先到Oracle的网站下载最新的 jdk 和 jre ,然后安装。这个安装比较恶心,装在什么地方也不说一声,害我找了半天才发现装在 /usr/java/jdk1.6.0_21/ 和 /usr/java/jre1.6.0_21/ 这两个目录中。
将jdk和jre的java注册到alternatives中,顺便也将jdk的javac注册到alternatives中。
1 [root@test03 ~]# alternatives --install /usr/bin/java java /usr/java/jre1.6.0_21/bin/java 400
2 [root@test03 ~]# alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_21/bin/java 400
3 [root@test03 ~]# alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_21/bin/javac 400
现在可以看看注册的成果了:
01 [root@test03 ~]# alternatives --config java
02
03 There are 3 programs which provide 'java'.
04
05 Selection Command
06 -----------------------------------------------
07 *+ 1 /usr/lib/jvm/jre-1.4.2-gcj/bin/java
08 2 /usr/java/jre1.6.0_21/bin/java
09 3 /usr/java/jdk1.6.0_21/bin/java
10
11 Enter to keep the current selection[+], or type selection number:
这里输入想要用的 java 就可以了,例如我选在了第2个。我们看看 /usr/bin/java的变化:
1 [root@test03 ~]# ll /usr/bin/java
2 lrwxrwxrwx 1 root root 22 Dec 17 2009 /usr/bin/java -> /etc/alternatives/java
3 [root@test03 ~]# ll /etc/alternatives/java
4 lrwxrwxrwx 1 root root 30 Aug 23 15:03 /etc/alternatives/java -> /usr/java/jre1.6.0_21/bin/java
可以看到 /usr/bin/java 的连接的地方没有变,改变了的/etc/alternatives/java 的连接,这其实是一个策略模式的实现:
Strategy_thumb.gif (8.96 KB, 下载次数: 1)
/usr/bin/java 的“调用”没有变,还是连接到 /etc/alternatives/java,/etc/alternatives/java的连接却被修改了,这个由 alternatives 管理。
通过linux的连接也可以简单地实现这种“接口”和“具体实现”的分离,但是 alternatives 提供一个配置清单,简单选一下就OK了,这为我们提供了很大的便利。
扩充一下,alternatives也可以管理我们自己的软件。例如,我自己写了个软件叫myjava,我也想实现这种基于“策略模式”的版本管理,我可以这样做:
1 alternatives --install /usr/bin/myjava myjava /usr/java/jdk1.6.0_21/bin/java 300
2 alternatives --install /usr/bin/myjava myjava /usr/java/jre1.6.0_21/bin/java 300
使用 alternatives 更换一下我的版本:
01 [root@test03 ~]# ll /usr/bin/myjava
02 lrwxrwxrwx 1 root root 24 Aug 23 14:43 /usr/bin/myjava -> /etc/alternatives/myjava
03 [root@test03 ~]# ll /etc/alternatives/myjava
04 lrwxrwxrwx 1 root root 30 Aug 23 14:46 /etc/alternatives/myjava -> /usr/java/jre1.6.0_21/bin/java
05 [root@test03 ~]#
06 [root@test03 ~]#
07 [root@test03 ~]# alternatives --config myjava
08
09 There are 2 programs which provide 'myjava'.
10
11 Selection Command
12 -----------------------------------------------
13 * 1 /usr/java/jdk1.6.0_21/bin/java
14 + 2 /usr/java/jre1.6.0_21/bin/java
15
16 Enter to keep the current selection[+], or type selection number: 1
17 [root@test03 ~]#
18 [root@test03 ~]#
19 [root@test03 ~]# ll /usr/bin/myjava
20 lrwxrwxrwx 1 root root 24 Aug 23 14:43 /usr/bin/myjava -> /etc/alternatives/myjava
21 [root@test03 ~]# ll /etc/alternatives/myjava
22 lrwxrwxrwx 1 root root 30 Aug 23 15:15 /etc/alternatives/myjava -> /usr/java/jdk1.6.0_21/bin/java
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论