最近想装个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