如何在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-[版本号]
。
之所以使用符号链接,是因为如果有新版本的JVM,您无需更新.bashrc
文件,它应自动指向新版本。
如果您想全局设置JAVA_HOME
环境变量并且在系统级别上使用,则应在/etc/environment
文件中设置。
/etc/environment
添加这一行:
JAVA_HOME=/usr/lib/jvm/java-7-oracle
PATH=$JAVA_HOME/bin
时,$JAVA_HOME
无法解析,尝试重新启动,没有效果。我需要在此文件或我的个人资料中export
或set
JAVA_HOME
吗? - raffian如果要将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上测试了这个解决方案,并且在两个操作系统上都能正常工作。
如果您希望此环境变量对所有用户可用并在系统启动时生效,则可以将以下内容添加到/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)。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
如果您进行任何形式的开发,您需要指向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,您应该再向上走一层文件夹: 如果您想将JAVA_HOME设置为JDK,您应该再向上走一层文件夹:
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:jre/bin/java::")
sudo update-java-alternatives --list
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从这里下载所需的Java版本
使用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
进入/opt目录:
cd /opt/
解压JDK安装包:
tar -xvzf jdk-8u172-linux-x64.tar.gz
4.JAVA_HOME=/opt/jdk1.8.0_172/
配置Java环境变量:
update-alternatives --install /usr/bin/java java ${JAVA_HOME%*/}/bin/java 20000
配置Javac环境变量:
update-alternatives --install /usr/bin/javac javac ${JAVA_HOME%*/}/bin/javac 20000
选择Java版本:
update-alternatives --config java
选择您想要使用的Java版本,例如:编号1表示'/opt/jdk1.8.0_172/bin/java'iTerm
验证Java版本:
java -version
最后一步:
重启服务。