如何在Ubuntu中将Oracle的Java设置为默认Java?

139

如何在Ubuntu中将JAVA_HOME的值更改为指向Oracle的Java?

它应该指向java-6-sun还是java-6-sun-1.6.0.24

9个回答

175

我放置了这一行:

export JAVA_HOME=/usr/lib/jvm/java-7-oracle

在我的~/.bashrc文件中。

/usr/lib/jvm/java7-oracle 应该是一个符号链接,指向 /usr/lib/jvm/java-7-oracle-[版本号]

之所以使用符号链接,是因为如果有新版本的JVM,您无需更新.bashrc文件,它应自动指向新版本。

如果您想全局设置JAVA_HOME 环境变量并且在系统级别上使用,则应在/etc/environment 文件中设置。


4
或者,如果您使用的是OpenJDK而不是Oracle(Sun)的JDK,则为/usr/lib/jvm/java-1.6.0-openjdk-amd64。 - pm_labs
7
你可以使用命令:export JAVA_HOME=/usr/lib/jvm/default-java/ 来设置Java环境变量。 - noomz
1
@noomz 如果默认的Java不存在,你该如何获取它? - AHungerArtist
@AHungerArtist 如果您安装openjdk或其他官方支持的Ubuntu软件包,则可以获得该功能。不幸的是,使用webupd8/java ppa不支持Oracle JDK。事实上,我完全不清楚“oracle-java7-set-default”软件包的作用。 - user1600649
你把它放在文件的哪个位置? - Czipperz
如果您希望它在大多数情况下与Ubuntu的“update-alternatives”一起使用,那么我认为最好(=最不错)的选择是将unset JAVA_HOME放入~/.bashrc中。原因是大多数程序会尝试自行确定正确的JAVA_HOME(如果未设置),并且他们尝试的第一件事是查找java可执行文件指向的位置。对于其余部分,您可以手动设置JAVA_HOME。显然,Java对于Ubuntu来说并不重要,无法支持此功能:https://bugs.launchpad.net/ubuntu/+source/java-common/+bug/45348 - Jakub Kotowski

167
如果您想在全局和系统级别进行更改;
在...中。
/etc/environment

添加这一行:

JAVA_HOME=/usr/lib/jvm/java-7-oracle

27
这是推荐的方法。https://help.ubuntu.com/community/EnvironmentVariables - daniel kullmann
@metdos 上面的答案不是全局或系统级别的吗? - Android Killer
1
@AndroidKiller,你有没有检查丹尼尔·库尔曼指出的链接? - metdos
@metdos的方法很好,但是变量引用对我不起作用...当像这样使用PATH=$JAVA_HOME/bin时,$JAVA_HOME无法解析,尝试重新启动,没有效果。我需要在此文件或我的个人资料中exportset JAVA_HOME吗? - raffian
@Raffian 我不确定有哪些不同的边缘情况,但这种方法对我来说完美地运行了。如需更多信息,建议您阅读 https://help.ubuntu.com/community/EnvironmentVariables。 - metdos
@raffian 你为什么想要这样做?通常你可以使用update-alternatives定义java命令,它已经链接到默认的Linux执行目录。 - keiki

63

如果要将Oracle的Java SE Development Kit设置为系统默认Java,只需从这里下载最新的Java SE Development Kit,然后在文件系统中的任何位置创建一个您喜欢的目录,例如/usr/java,现在将刚刚下载的文件提取到该目录中:

$ sudo tar xvzf jdk-8u5-linux-i586.tar.gz -C /usr/java

现在设置你的 JAVA_HOME 环境变量:

$ JAVA_HOME=/usr/java/jdk1.8.0_05/
$ sudo update-alternatives --install /usr/bin/java java ${JAVA_HOME%*/}/bin/java 20000
$ sudo update-alternatives --install /usr/bin/javac javac ${JAVA_HOME%*/}/bin/javac 20000

确保将Oracle的Java设置为默认Java:

$ update-alternatives --config java

你会得到类似这样的内容:

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

  Selection    Path                                           Priority   Status
------------------------------------------------------------
* 0            /opt/java/jdk1.8.0_05/bin/java                  20000     auto mode
  1            /opt/java/jdk1.8.0_05/bin/java                  20000     manual mode
  2            /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java   1061      manual mode

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

在左边的数字前要注意星号,如果没有设置正确的数字,则通过键入它的编号并按“Enter”键来选择正确的数字。现在来测试一下你的Java:

$ java -version

如果你得到类似以下的内容,那么就可以开始了:
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) Server VM (build 25.5-b02, mixed mode)

需要注意的是,您可能需要root权限或者加入sudoers组才能执行此操作。我在ubuntu 12.04和Debian wheezy上测试了这个解决方案,并且在两个操作系统上都能正常工作。


1
是的,这个解决方案比被接受的那个更加简洁。 - simone cittadini
@JayminGajjar表示,表达感激之情并不必要。在这个网站上支持好问题/答案的机制是给它们点赞。如果您没有足够的声望来做到这一点,但有足够的声望来发表评论,请尝试在评论中包含一些有用的信息,例如您在哪个系统和什么操作系统上测试并发现此解决方案有效等。 - max
@Barracuda 我已经点赞了,你的信息是正确的。在我的Ubuntu 16.10 64位服务器操作系统上也运行成功了 :) - Jaymin Gajjar

21

如果您希望此环境变量对所有用户可用并在系统启动时生效,则可以将以下内容添加到/etc/profile.d/java.sh中(如有必要,请创建它):

export JDK_HOME=/usr/lib/jvm/java-7-oracle
export JAVA_HOME=/usr/lib/jvm/java-7-oracle

然后在终端运行:

sudo chmod +x /etc/profile.d/java.sh
source /etc/profile.d/java.sh
我的第二个问题是 - 它应该指向java-6-sun还是java-6-sun-1.6.0.24? 它应该始终指向java-7-oracle,因为这会创建符号链接到最新安装的Java版本(假设您是从Ubuntu存储库而不是从oracle.com下载安装Java)。

12

Java 6:

导出JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-amd64

或Java 7:

导出JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64


11

如果您进行任何形式的开发,您需要指向JDK(Java开发工具包)。否则,您可以指向JRE(Java运行环境)。

JDK包含JRE所有的内容以及更多。如果您只是执行Java程序,您可以指向JRE或JDK。

您应该根据当前使用的Java设置JAVA_HOMEreadlink将打印当前Java的符号链接的值,而sed将调整为JRE目录:

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
如果您想将JAVA_HOME设置为JDK,您应该再向上走一层文件夹:

如果您想将JAVA_HOME设置为JDK,您应该再向上走一层文件夹:

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:jre/bin/java::")

8

6
看看这里;运行。
sudo  update-java-alternatives --list

列出机器上所有Java安装的名称和目录,然后运行:
sudo  update-java-alternatives --set [JDK/JRE name e.g. java-8-oracle]

选择使用哪个JRE/JDK。

如果你想为每个Java任务使用不同的JDKs/JREs,你可以运行update-alternatives来配置一个java可执行文件; 你可以运行

sudo  update-alternatives --config java[Tab]

查看可以配置的Java命令(java、javac、javah、javaws等)。然后

sudo  update-alternatives --config [javac|java|javadoc|etc.]

将会把Java任务/命令与特定的JDK/JRE相关联。

对于某些应用程序,您可能还需要设置JAVA_HOME:从这个答案中,您可以使用以下方法:

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

对于JREs,或者

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:jre/bin/java::")

适用于JDKs。


另一种方法:java -XshowSettings 2>&1 | grep -e 'java.home' | awk '{print "JAVA_HOME="$3}' | sed "s/\/jre//g" >> /etc/environment - Xdg

0

这里下载所需的Java版本

  1. 使用wget命令下载JDK安装包:

    wget -c --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" http://monalisa.cern.ch/MONALISA/download/java/jdk-8u172-linux-x64.tar.gz

  2. 进入/opt目录:

    cd /opt/

  3. 解压JDK安装包:

    tar -xvzf jdk-8u172-linux-x64.tar.gz

    4.JAVA_HOME=/opt/jdk1.8.0_172/

  4. 配置Java环境变量:

    update-alternatives --install /usr/bin/java java ${JAVA_HOME%*/}/bin/java 20000

  5. 配置Javac环境变量:

    update-alternatives --install /usr/bin/javac javac ${JAVA_HOME%*/}/bin/javac 20000

  6. 选择Java版本:

    update-alternatives --config java

  7. 选择您想要使用的Java版本,例如:编号1表示'/opt/jdk1.8.0_172/bin/java'iTerm

  8. 验证Java版本:

    java -version

    最后一步:

    重启服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接