99

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

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

4

10 回答 10

59

如果您在选择选项后输入“java -version”,您会注意到一个很大的变化。因此,如果您运行update-alternatives --config java并选择 option 3,您将使用Sun实现。
此外,关于autovs manual mode,进行选择应该从auto mode本页中删除,说明

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

我相信auto mode当你安装第一个/唯一的 JRE/JDK 时就设置好了。

于 2012-10-08T19:00:08.787 回答
43

假设当时已经安装了 JDK /opt/java/jdk1.8.0_144

  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 等重复此操作。

于 2017-11-22T10:31:15.477 回答
39

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
于 2015-10-05T17:39:13.940 回答
21

这就是我安装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
于 2018-12-23T10:24:58.477 回答
12

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

安装

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

~$ 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版本

于 2020-02-24T14:21:37.810 回答
7

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

于 2014-07-08T08:24:37.330 回答
3

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

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

于 2020-04-23T12:13:46.267 回答
1

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

于 2013-11-08T08:14:08.727 回答
0

我的 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 (build 11.0.12+8-LTS-237) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.12+ 8-LTS-237,混合模式)

现在您可以运行特定于

[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

于 2021-10-13T05:41:42.053 回答
0

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

sudo update-alternatives --config java

命令行截图

于 2021-05-28T14:12:00.097 回答