linux多版本管理工具,使用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@www.linuxidc.com bin]# ll /usr/bin/java

2

lrwxrwxrwx  1 root root 22 Dec 17  2009 /usr/bin/java -> /etc/alternatives/java

3

[root@www.linuxidc.com 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@www.linuxidc.com ~]# alternatives --install /usr/bin/java  java  /usr/java/jre1.6.0_21/bin/java  400

2

[root@www.linuxidc.com ~]# alternatives --install /usr/bin/java  java  /usr/java/jdk1.6.0_21/bin/java  400

3

[root@www.linuxidc.com ~]# alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_21/bin/javac 400

现在可以看看注册的成果了:

01

[root@www.linuxidc.com ~]# alternatives --config java

02

03

There are 3 programswhich 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[+], ortype selection number:

这里输入想要用的 java 就可以了,例如我选在了第2个。我们看看 /usr/bin/java的变化:

1

[root@www.linuxidc.com ~]# ll /usr/bin/java

2

lrwxrwxrwx  1 root root 22 Dec 17  2009 /usr/bin/java -> /etc/alternatives/java

3

[root@www.linuxidc.com ~]# 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 的连接,这其实是一个策略模式的实现:

3b51daa8933991d1e3c2b7c101d9deba.gif

/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@www.linuxidc.com ~]# ll /usr/bin/myjava

02

lrwxrwxrwx  1 root root 24 Aug 23 14:43 /usr/bin/myjava -> /etc/alternatives/myjava

03

[root@www.linuxidc.com ~]# 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@www.linuxidc.com ~]#

06

[root@www.linuxidc.com ~]#

07

[root@www.linuxidc.com ~]# alternatives  --config myjava

08

09

There are 2 programswhich 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[+], ortype selection number: 1

17

[root@www.linuxidc.com ~]#

18

[root@www.linuxidc.com ~]#

19

[root@www.linuxidc.com ~]# ll /usr/bin/myjava

20

lrwxrwxrwx  1 root root 24 Aug 23 14:43 /usr/bin/myjava -> /etc/alternatives/myjava

21

[root@www.linuxidc.com ~]# 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

是不是很方便 :-)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值