【问题标题】:How to use the command update-alternatives --config java如何使用命令 update-alternatives --config java
【发布时间】:2012-09-29 01:26:09
【问题描述】:

我正在 Linux Debian (Squeeze) 上安装 Apache Solr。我被指示安装 sun-java jdk 1st。然后有人告诉我应该使用命令sudo update-alternatives --config java 来确保特定的 java (sun-java) 是默认运行时。然而,当我运行这个命令时,我得到:

There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                      Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      auto mode
  1            /usr/bin/gij-4.4                           1044      manual mode
  2            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      manual mode
  3            /usr/lib/jvm/java-6-sun/jre/bin/java       63        manual mode

Press enter to keep the current choice[*], or type selection number:

那么我应该选择哪个数字将 sun-java 作为默认运行时? 另外,自动和手动模式到底是什么意思?如果我在上面选择 3 并运行 update-alternative 命令,我会收到与上面相同的输出,除了 * 现在在 3 前面之外似乎没有任何变化,尽管它仍然是手动模式。

有没有办法确认我所做的是正确的?

【问题讨论】:

    标签: java debian


    【解决方案1】:

    如果你在选择选项后输入“java -version”,你会注意到一个很大的变化。因此,如果您运行 update-alternatives --config java 并选择选项 3,您将使用 Sun 实现。
    此外,关于automanual mode,做出选择应从auto mode 中剔除,this page 声明:

    当使用--config 选项时,替代项将列出所有 给定名称为主链接的链接组的选择。你 然后将提示您选择哪个选项用于链接 团体。进行更改后,链接组将不再位于 auto mode。您需要使用--auto 选项才能返回 到自动状态。

    我相信auto mode 是在您安装第一个/唯一的 JRE/JDK 时设置的。

    【讨论】:

      【解决方案2】:

      假设已经在/opt/java/jdk1.8.0_144 中安装了JDK,那么:

      1. 安装 javac 的替代品

        $ sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.8.0_144/bin/javac 1
        
      2. 检查/更新替代配置:

        $ sudo update-alternatives --config javac
        

      如果javac 只有一个替代方案,您将收到一条消息,否则请选择新 JDK 的选项。

      检查一切设置是否正确:

      $ which javac
      /usr/bin/javac
      
      $ ls -l /usr/bin/javac
      lrwxrwxrwx 1 root root 23 Sep  4 17:10 /usr/bin/javac -> /etc/alternatives/javac
      
      $ ls -l /etc/alternatives/javac
      lrwxrwxrwx 1 root root 32 Sep  4 17:10 /etc/alternatives/javac -> /opt/java/jdk1.8.0_144/bin/javac
      

      最后

      $ javac -version
      javac 1.8.0_144
      

      根据需要重复 java、keytool、jar 等。

      【讨论】:

      • 如何自动更新?我只是厌倦了每次调用sudo update-alternatives --config javac时都必须手动配置它
      【解决方案3】:

      update-alternatives 在这种情况下是有问题的,因为它会强制您根据 JDK 更新所有元素。

      为此,包java-common 包含一个名为update-java-alternatives 的工具。

      使用起来很简单。首先列出您机器上可用的 JDK 安装:

      root@mylaptop:~# update-java-alternatives -l
      java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
      java-1.8.0-openjdk-amd64 1069 /usr/lib/jvm/java-1.8.0-openjdk-amd64
      

      然后拿起一个:

      root@mylaptop:~# update-java-alternatives -s java-1.7.0-openjdk-amd64
      

      【讨论】:

        【解决方案4】:

        这就是我安装 jdk 的方式

        #!/bin/bash
        cd /opt/
        sudo mkdir java
        sudo tar -zxvf ~/Downloads/jdk-8u192-linux-x64.tar.gz
        sudo ln -s  jdk1.8.0_192 current
        for file in /opt/java/current/bin/*
        do
           if [ -x $file ]
           then
              filename=`basename $file`
              sudo update-alternatives --install /usr/bin/$filename $filename $file 20000
              sudo update-alternatives --set $filename $file
              #echo $file $filename
           fi
        done
        

        【讨论】:

          【解决方案5】:

          我使用的是 Ubuntu 18.04 LTS。大多数时候,当我更改我的java 版本时,我也想使用相同的javac 版本。
          我以这种方式使用update-alternatives,而使用java_home 替代方案:

          安装

          安装/opt/java/<version>中的每个java版本,例如

          ~$ ll /opt/java/
          total 24
          drwxr-xr-x 6 root root 4096 jan. 22 21:14 ./
          drwxr-xr-x 9 root root 4096 feb.  7 13:40 ../
          drwxr-xr-x  8 stephanecodes stephanecodes 4096 jan.   8  2019 jdk-11.0.2/
          drwxr-xr-x  7 stephanecodes stephanecodes 4096 dec.  15  2018 jdk1.8.0_201/
          

          配置备选方案

          ~$ sudo update-alternatives --install /opt/java/current java_home /opt/java/jdk-11.0.2/ 100
          ~$ sudo update-alternatives --install /opt/java/current java_home /opt/java/jdk1.8.0_201 200
          

          声明JAVA_HOME(在这种情况下,我为此使用了一个全局初始化脚本)

          ~$ sudo sh -c 'echo export JAVA_HOME=\"/opt/java/current\" >> environment.sh'
          

          注销或重新启动 Ubuntu(这将重新加载 /etc/profile.d/environment.sh

          用法

          更改 java 版本

          选择您要使用的版本

          ~$ sudo update-alternatives --config java_home
          
          There are 2 choices for the alternative java_home (providing /opt/java/current).
          
            Selection    Path                    Priority   Status
          ------------------------------------------------------------
            0            /opt/java/jdk-11.0.2     200       auto mode
            1            /opt/java/jdk-11.0.2     200       manual mode
          * 2            /opt/java/jdk1.8.0_201   100       manual mode
          
          Press <enter> to keep the current choice[*], or type selection number: 
          

          检查版本

          ~$ java -version
          openjdk version "11.0.2" 2019-01-15
          OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
          OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
          
          ~$ javac -version
          javac 11.0.2
          

          提示

          将以下行添加到~/.bash_aliases 文件:

          alias change-java-version="sudo update-alternatives --config java_home && java -version && javac -version"
          

          现在使用change-java-version 命令更改java版本

          【讨论】:

          • 喜欢这种技术!描述中缺少几件事:您需要创建 /opt/java,还需要将 /opt/java/current/bin 添加到 $PATH
          【解决方案6】:

          还有许多其他二进制文件需要链接,所以我认为最好尝试类似sudo update-alternatives --all 并为除javajavac 之外的所有其他内容选择正确的替代方案。

          【讨论】:

            【解决方案7】:

            如果你想定期切换jdk(或者一旦发布就更新到新的),使用sdkman非常方便。

            您也可以使用其他工具,例如 maven 和 sdkman。

            【讨论】:

              【解决方案8】:

              看看 https://wiki.debian.org/JavaPackage 在此页面的底部,使用 java-common 包中的命令描述了另一种方法

              【讨论】:

                【解决方案9】:

                我的 AWS EC2 实例上安装了 2 个版本的 java; java 8 & 11 但是 couponservice-0.0.1-SNAPSHOT.jar 文件需要 java 11 才能运行,因为这个 .jar 文件是使用 java 11 创建的。

                [root@ip-172-31-94-132 ~]# alternatives --config java

                有 2 个程序提供“java”。

                选择命令

                • 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.amzn2.0.1.x86_64/jre/bin/java)
                • 2 /usr/java/jdk-11.0.12/bin/java

                输入保留当前选择[+],或输入选择编号:2

                [root@ip-172-31-94-132 ~]# java -version

                java 版本 "11.0.12" 2021-07-20 LTS Java(TM) SE 运行时环境 18.9(内部版本 11.0.12+8-LTS-237) Java HotSpot(TM) 64 位服务器 VM 18.9(内部版本 11.0.12+8-LTS-237,混合模式)

                现在您可以运行特定于的 .jar 文件

                [root@ip-172-31-94-132 ~]# java -jar couponservice-0.0.1-SNAPSHOT.jar

                参考:-https://www.server-world.info/en/note?os=CentOS_7&p=jdk11&f=2

                【讨论】:

                  【解决方案10】:

                  安装任何打开的 jdk 后,只需运行并选择所需的 jdk:

                  sudo update-alternatives --config java

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-08-14
                    • 1970-01-01
                    • 2019-07-18
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多