在多个 Java 版本之间切换

mcE*_*nge 113 java jdk openjdk android-studio

在 Ubuntu 14.04 上安装 Android Studio 时,我收到消息,我的 Java 版本 ( javac 1.7.0_79) 导致问题。我找到了如何安装更新的 Oracle 版本的 Java的解决方案

sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
Run Code Online (Sandbox Code Playgroud)

但是我担心这可能会覆盖我现有open-jdk的 Java 版本。由于我不知道我的哪些程序依赖于 Java,我担心这会导致其他程序崩溃。

有没有办法确保apt-get不会覆盖我以前的 Java?我基本上希望两者都安装,并且能够根据我需要的版本手动在它们之间切换。

dan*_*zel 145

Apt-get 不会覆盖现有的 Java 版本。

要在已安装的 Java 版本之间切换,请使用该update-java-alternatives命令。

列出所有 Java 版本:

update-java-alternatives --list
Run Code Online (Sandbox Code Playgroud)

将 java 版本设置为默认值(需要 root 权限):

sudo update-java-alternatives --set /path/to/java/version
Run Code Online (Sandbox Code Playgroud)

...where/path/to/java/version是上一个命令列出的命令之一(例如/usr/lib/jvm/java-7-openjdk-amd64)。


附加信息:

update-java-alternatives是一个方便的工具,它使用 Debian 的替代系统( update-alternatives) 来设置一组指向指定 Java 版本的链接(例如javajavac,...)。

  • @Nenotlep 为了改变`JAVA_HOME`,你必须运行以下命令:`source /etc/environment` (2认同)

mue*_*uet 93

sudo update-alternatives --config java
Run Code Online (Sandbox Code Playgroud)

它列出了所有已安装的版本,并标记了当前活动的版本,并提供了用于切换的对话框:

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

Selection    Path...
------------------------------------------------------------
  0            /usr/lib/jvm/java-9-oracle/bin/java...
* 1            /usr/lib/jvm/java-7-oracle/jre/bin/java...
  2            /usr/lib/jvm/java-8-oracle/jre/bin/java...
  3            /usr/lib/jvm/java-9-oracle/bin/java...

Press <enter> to keep...[*], or type selection number: 
Run Code Online (Sandbox Code Playgroud)

export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"
Run Code Online (Sandbox Code Playgroud)

$JAVA_HOME从当前活动版本 设置

  • 使用此命令,您必须分别更新 java、javac 和 jrunscript。 (3认同)

小智 8

根据@muet 的回答,我发现它可以无缝工作:

将此添加到~/.bashrc

export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"
Run Code Online (Sandbox Code Playgroud)

添加到别名:

alias useJava8='yes | sudo apt-get install oracle-java8-set-default && source ~/.bashrc'
alias useJava7='yes | sudo apt-get install oracle-java7-set-default && source ~/.bashrc'
Run Code Online (Sandbox Code Playgroud)

然后您可以仅使用以下命令在同一个 shell 中切换:useJava7useJava8


naX*_*aXa 8

配置 Java

您可以使用 配置在命令行中默认使用哪个版本update-alternatives,它管理用于不同命令的符号链接。

sudo update-alternatives --config java
Run Code Online (Sandbox Code Playgroud)

输出将类似于以下内容。

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

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      auto mode
  1            /usr/lib/jvm/java-6-oracle/jre/bin/java          1         manual mode
  2            /usr/lib/jvm/java-7-oracle/jre/bin/java          2         manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
  4            /usr/lib/jvm/java-8-oracle/jre/bin/java          3         manual mode
  5            /usr/lib/jvm/java-9-oracle/bin/java              4         manual mode

Press <enter> to keep the current choice[*], or type selection number:
Run Code Online (Sandbox Code Playgroud)

您现在可以选择要用作默认值的号码。这也可以用于其他 Java 命令,例如编译器 ( javac)、文档生成器 ( javadoc)、JAR 签名工具 ( jarsigner) 等。您可以使用以下命令,填写您要自定义的命令

sudo update-alternatives --config command
Run Code Online (Sandbox Code Playgroud)

设置JAVA_HOME环境变量

许多程序(例如 Java 服务器)使用 JAVA_HOME 环境变量来确定 Java 安装位置。

从首选安装中复制路径,然后使用 Sublime Text 或您喜欢的文本编辑器打开 /etc/environment。

sudo subl /etc/environment
Run Code Online (Sandbox Code Playgroud)

在此文件的末尾,添加以下行,确保将突出显示的路径替换为您自己复制的路径。

JAVA_HOME="/usr/lib/jvm/java-8-oracle"
Run Code Online (Sandbox Code Playgroud)

保存并退出文件,然后重新加载它:source /etc/environment.
您现在可以通过执行以下命令来测试是否已设置环境变量:echo $JAVA_HOME. 这将返回您刚刚设置的路径。