正确使用update-alternatives管理jdk环境的方法

本文介绍了如何在Ubuntu系统中使用update-alternatives工具管理Java多版本环境,详细步骤包括删除已有链接、配置环境变量、安装软链接以及通过update-alternatives进行版本切换,确保JAVA_HOME等环境变量的正确设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近想装个CMAK试试,Java环境需要jdk11+,我的乖乖,我还停留在java8呢,原来我的ubuntu装的是oracle java se 1.8 的,如果想装多个java环境,势必要管理一下,能方便的切换,就像anaconda 中切换python环境一样。

简单百度一下,update-alternatives 就很好用,可是可是,都是这个姿势:

# 自己用tar包装的oracle jdk 也加入update-alternatives
update-alternatives --install /usr/bin/java java /usr/local/java/jdk1.8.0_202/bin/java 1
update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.8.0_202/bin/javac 1
# 切换java
update-alternatives --config java
# 切换javac
update-alternatives --config javac

在这里插入图片描述

这里说一下,看了好几个文章,都说还要配置~/.bashrc或者 /etc/profile,
然后才能生效。????问号脸 都用update-alternatives 来管理了,还配置环境变量做什么。 这里必须看一下update-alternatives 是干什么的。man一下
在这里插入图片描述

update-alternatives - maintain symbolic links determining default commands

可以看到是用来维护软链接的。例如:

root@ubuntu22:~# which java
/bin/java
root@ubuntu22:~# ll /bin/java
lrwxrwxrwx 1 root root 22 Sep  8 00:41 /bin/java -> /etc/alternatives/java*
root@ubuntu22:~# ll -i /bin/java
406308 lrwxrwxrwx 1 root root 22 Sep  8 00:41 /bin/java -> /etc/alternatives/java*
root@ubuntu22:~# ll -i /etc/alternatives/java
267803 lrwxrwxrwx 1 root root 37 Sep  8 01:19 /etc/alternatives/java -> /usr/local/java/jdk1.8.0_202/bin/java*
root@ubuntu22:~# ll -i /usr/local/java/jdk1.8.0_202/bin/java
398451 -rwxr-xr-x 1 uucp 143 8464 Dec 15  2018 /usr/local/java/jdk1.8.0_202/bin/java*

这里可以看到从/bin/java 指向/etc/alternatives/java ,最后指向/usr/local/java/jdk1.8.0_202/bin/java,这个才是java 的目录。可以看到他们的索引节点号(Inode Index)都不一样,是软链接。

每次都操作两次且先放下,但是JAVA_HOME,CLASSPATH这些怎么办?
其实吧,也可以直接这样来切换:

alias openjdk7='export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 && export CLASSPATH=.:${JAVA_HOME}/lib:${JAVA_HOME}/jre/lib && export PATH=${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin:$PATH && java -version'
alias openjdk8='export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 && export CLASSPATH=.:${JAVA_HOME}/lib:${JAVA_HOME}/jre/lib && export PATH=${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin:$PATH && java -version'

但何必造轮子呢

下面来看看我觉得正确的使用方式,不好的地方请大家指出来哈:

# 先把原来添加的java、javac 删除
update-alternatives --remove-all java
update-alternatives --remove-all javac

# 修改/etc/profile 或者 ~/.bashrc 添加JAVA_HOME 之类的
nano /etc/profile
# 添加如下 
export JAVA_HOME=/usr/local/jdk    ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
# 添加 /usr/local/jdk 的软链接,把我原来的openjdk11、8、18 还有oraclejdk8 添加上
update-alternatives --install /usr/local/jdk jdk /usr/local/java/jdk1.8.0_202 1000
update-alternatives --install /usr/local/jdk jdk /usr/lib/jvm/java-8-openjdk-amd64 1001
update-alternatives --install /usr/local/jdk jdk /usr/lib/jvm/java-11-openjdk-amd64 1002
update-alternatives --install /usr/local/jdk jdk /usr/lib/jvm/java-18-openjdk-amd64 1003

好了,查询下:

root@ubuntu22:~# update-alternatives --config jdk
There are 4 choices for the alternative jdk (providing /usr/local/jdk).

  Selection    Path                                Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-18-openjdk-amd64   1003      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64   1002      manual mode
  2            /usr/lib/jvm/java-18-openjdk-amd64   1003      manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64    1001      manual mode
  4            /usr/local/java/jdk1.8.0_202         1000      manual mode

默认是openjdk18 ,挺好

root@ubuntu22:~# java -version
openjdk version "18.0.2-ea" 2022-07-19
OpenJDK Runtime Environment (build 18.0.2-ea+9-Ubuntu-222.04)
OpenJDK 64-Bit Server VM (build 18.0.2-ea+9-Ubuntu-222.04, mixed mode, sharing)
root@ubuntu22:~# javac -version
javac 18.0.2-ea
root@ubuntu22:~# echo $JAVA_HOME
/usr/local/jdk
root@ubuntu22:~# ll /usr/local/jdk
lrwxrwxrwx 1 root root 21 Sep  8 02:24 /usr/local/jdk -> /etc/alternatives/jdk/

java,javac 版本正常,切换一下

root@ubuntu22:~# update-alternatives --config jdk
There are 4 choices for the alternative jdk (providing /usr/local/jdk).

  Selection    Path                                Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-18-openjdk-amd64   1003      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64   1002      manual mode
  2            /usr/lib/jvm/java-18-openjdk-amd64   1003      manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64    1001      manual mode
  4            /usr/local/java/jdk1.8.0_202         1000      manual mode

Press <enter> to keep the current choice[*], or type selection number: 4
update-alternatives: using /usr/local/java/jdk1.8.0_202 to provide /usr/local/jdk (jdk) in manual mode
root@ubuntu22:~# java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
root@ubuntu22:~# javac -version
javac 1.8.0_202

切换成功。
文章到此结束,此致,敬礼!!
我要去装CMAK了,bye

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值