在多个Java版本之间切换


65

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

sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

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

有没有办法确保apt-get不覆盖以前的Java?我基本上希望同时安装这两者,并且能够根据需要的版本手动进行切换。

Answers:


82

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

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

列出所有Java版本:

update-java-alternatives --list

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

sudo update-java-alternatives --set /path/to/java/version

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


附加信息:

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


1
对我来说,这导致java -version为java8,但JAVA_HOME仍设置为7 :(
Nenotlep

这也解决了我的问题。@Nenotlep我所做的是在.bashrc或/ etc / environment中手动编辑环境变量
nuttynibbles 18/09/28

update-java-alternatives对我不可用。我只是用替换了该命令update-alternatives java
nofinator

@nofinator仅影响java可执行文件。您使用哪个Ubuntu版本?
danzel

1
@Nenotlep为了更改JAVA_HOME您必须运行以下命令: source /etc/environment
janb

48

采用

sudo update-alternatives --config java

其中列出了所有已安装的版本,其中当前活动的版本已被标记为一个,并提供了切换对话框:

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: 

采用

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

$JAVA_HOME从当前活动版本 进行设置


正如@danzel在接受的答案中指出的那样,这仅影响java可执行文件,而不影响配置的其他部分。update-java-alternatives如果可用,请使用。
Premek Brada

4

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

将此添加到~/.bashrc

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

添加到别名:

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'

然后,您可以仅使用以下命令在同一外壳内进行切换:useJava7useJava8


将别名设置为永久别名可以将其放在〜/ .bashrc中,更多信息请参见askubuntu.com/questions/17536/…–
康斯坦丁·祖宾

E:无法找到软件包oracle-java7-set-default
Prakash Pandey

在不同的Java版本之间安装,使用和切换的最简单的方法就是使用SDKMAN!看到这里:sdkman.io/usage.html
brianjohnsen

最近遇到了另一个命令来设置JAVA_HOME,但尚未尝试.bashrcexport JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
ThiamTeck '18

3

配置Java

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

sudo update-alternatives --config java

输出将类似于以下内容。

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:

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

sudo update-alternatives --config command

设置JAVA_HOME环境变量

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

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

sudo subl /etc/environment

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

JAVA_HOME="/usr/lib/jvm/java-8-oracle"

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.