问题描述
如何在Ubuntu中更改JAVA_HOME
的值以指向Oracle的Java?
它应该指向java-6-sun
还是java-6-sun-1.6.0.24
?
最佳思路
我把线:
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
在我的~/.bashrc
文件中。
/usr/lib/jvm/java7-oracle
应该是指向/usr/lib/jvm/java-7-oracle-[version number here]
的符号链接。
它是一个符号链接的原因是,如果有JVM的新版本,则不需要更新.bashrc
文件,它应自动指向新版本。
如果要全局和在系统级别设置JAVA_HOME
环境变量,则意味着应在/etc/environment
文件中进行设置。
次佳思路
如果要在全局和系统级别进行更改;
在
/etc/environment
添加此行:
JAVA_HOME=/usr/lib/jvm/java-7-oracle
第三种思路
要将Oracle的Java SE Development Kit设置为系统默认Java,只需从here下载最新的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上测试了该解决方案,并且在它们两者中均有效。
第四种思路
如果要让所有用户都可以使用此环境变量,并且希望在系统启动时将其添加到/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
My second question is – should it point to java-6-sun or java-6-sun-1.6.0.24 ?
它应该始终指向java-7-oracle
,因为该符号链接到最新安装的java-7-oracle
(假设您是从Ubuntu存储库中安装Java的,现在是从oracle.com上的下载中安装的)。
第五种思路
Java 6的
export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-amd64
或Java 7
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
第六种思路
如果要进行任何类型的开发,则需要指向JDK(Java开发工具包)。否则,您可以指向JRE(Java运行时环境)。
JDK包含JRE拥有的所有内容以及更多内容。如果您只是执行Java程序,则可以指向JRE或JDK。
您应该基于当前使用的Java设置JAVA_HOME
。 readlink
将为当前Java打印符号链接的值,而sed
将其调整到JRE目录:
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
如果要将JAVA_HOME设置为JDK,则应再增加一个文件夹:
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:jre/bin/java::")
第七种思路
如果要在安装多个JDK时使用特定版本的Java,则仅设置JAVA_HOME可能不起作用。
您需要使用sudo update-alternatives --config java
设置默认Java。
请参考https://askubuntu.com/questions/121654/how-to-set-default-java-version。
第八种思路
参见this;跑
sudo update-java-alternatives --list
通过名称和目录列出计算机上的所有Java安装,然后运行
sudo update-java-alternatives --set [JDK/JRE name e.g. java-8-oracle]
选择要使用的JRE /JDK。
如果要为每个Java任务使用不同的JDK /JRE,则可以运行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:从this answer可以使用
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
对于JRE,或
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:jre/bin/java::")
用于JDK。