如何使用命令update-alternatives --config java

时间:2012-10-08 18:57:05

标签: java debian

我在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前面之外,似乎没有任何改变,尽管它仍然是手动模式。

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

9 个答案:

答案 0 :(得分:37)

如果您在执行此操作后键入“java -version”,则在选择选项时会发现很大的变化。因此,如果您运行update-alternatives --config java并选择选项3,您将使用 Sun 实施。
此外,关于auto vs manual mode,进行选择应该从auto modethis page说明:

  

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

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

答案 1 :(得分:14)

在这种情况下,

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

答案 2 :(得分:7)

假设有人在/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
    
  3. 如果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等。

答案 3 :(得分:5)

这是我安装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

答案 4 :(得分: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版本

答案 5 :(得分:3)

还有许多其他二进制文件需要链接,因此我认为尝试类似sudo update-alternatives --all并为java和{{1}之外的其他所有内容选择正确的替代方案要好得多}}

答案 6 :(得分:1)

看一看 https://wiki.debian.org/JavaPackage 在本页的底部,使用java-common软件包中的命令描述了其他方法

答案 7 :(得分:0)

如果要定期切换jdk(或在发行后更新到新的jdk),使用sdkman非常方便。

您也可以使用sdkman等其他工具。

答案 8 :(得分:0)

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

sudo update-alternatives --config java