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


    最近想装个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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

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

    update-alternatives - maintain symbolic links determining default commands
    
    • 1

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

    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*
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    这里可以看到从/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'
    
    • 1
    • 2

    但何必造轮子呢

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

    # 先把原来添加的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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    好了,查询下:

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    默认是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/
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

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

  • 相关阅读:
    常见的12种二次曲面方程及可视化
    2023年9月14日
    实验二:数据类型、运算符和表达式——桂林航天工业学院
    android pdf框架-4,分析barteksc/PdfiumAndroid源码1
    攻防世界 高手进阶区-WEB
    操作符keyof的作用是什么
    初识Java 10-1 集合
    Matter 1.3版标准新出炉,支持更多智能家居/家电/能源等设备
    django 操作
    【附源码】Python计算机毕业设计软考刷题系统
  • 原文地址:https://blog.csdn.net/NOOBBB/article/details/126758565