我最近尝试安装最新版本的 Oracle JDK(1.8),但不知何故我无法覆盖系统正在使用的当前 Java 版本。我将 JAVA_HOME 变量设置为指向新安装,将其添加到路径并导出变量,如下所示:
/etc/profile 的内容:
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
JAVA_HOME=/usr/local/java/jdk1.8.0_40
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME
export PATH
~
环境变量的输出:
echo $JAVA_HOME
/usr/local/java/jdk1.8.0_40
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/java/jdk1.8.0_40/bin
但问题是:
java -version
java version "1.7.0_72"
Java(TM) SE Runtime Environment (build 1.7.0_72-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.72-b04, mixed mode)
which java
/usr/bin/java
javac -version
javac 1.7.0_72
'java -version' 和 javac 仍指向原始安装。我安装了 gradle(我首先对其进行了升级),它指向较新的安装。
gradle --version
------------------------------------------------------------
Gradle 1.5
------------------------------------------------------------
Gradle build time: Sunday, June 15, 2014 3:27:36 PM UTC
Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.9.4 compiled on May 9 2014
Ivy: non official version
JVM: 1.8.0_40 (Oracle Corporation 25.40-b25)
OS: Linux 3.16.0-31-generic amd64
其他参考资料:
update-alternatives --display java
java - auto mode
link currently points to /usr/lib/jvm/java-7-oracle/jre/bin/java
/usr/lib/jvm/java-7-oracle/jre/bin/java - priority 2
slave java.1.gz: /usr/lib/jvm/java-7-oracle/man/man1/java.1.gz
Current 'best' version is '/usr/lib/jvm/java-7-oracle/jre/bin/java'.
update-alternatives --display javac
javac - auto mode
link currently points to /usr/lib/jvm/java-7-oracle/bin/javac
/usr/lib/jvm/java-7-oracle/bin/javac - priority 2
slave javac.1.gz: /usr/lib/jvm/java-7-oracle/man/man1/javac.1.gz
Current 'best' version is '/usr/lib/jvm/java-7-oracle/bin/javac'.
我该如何解决这个问题?任何帮助都将不胜感激!另外,如果我需要删除早期的 v1.7,我该怎么做?
答案1
您应该使用alternatives
:Ubuntu 提供的一种支持软件多个版本的方法。
安装 Oracle JDK 后,告诉它以下替代方案:
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_40/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_40/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_40/bin/javaws" 1
安装后,选择默认选项:
sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config javaws
然后您可以在列表中选择要使用的替代方案。
WebUpd8 PPA
WebUpd8是一个流行的 Ubuntu 网站,他们保存了很多非常有用的 PPA。他们的 Java PPA 很棒,因为根据 Oracle EULA,Oracle Java 不能重新分发,但 PPA 运行 JDK 安装程序(类似于方法flash-installer
)。
这个 PPA 经常更新,甚至有 Java 9。因此,您可以始终保持 Java 自动更新并正确配置。
要添加 PPA 并从那里安装 Java8:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
答案2
您的安装没有问题,但您需要备选系统来设置您键入jave
或时要执行的默认二进制文件javac
。基本上,备选系统允许您在有许多其他具有相同功能的备选二进制文件时选择一个二进制文件来运行。
在您的例子中,您java
安装了两个版本,但alternatives
只有旧版本链接为通用java
二进制文件。您需要在 java 二进制备选项中添加新版本,并使用数值将其设置为默认版本,使其优先于其他版本。
sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk1.8.0_40/bin/java 100
sudo update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.8.0_40/bin/javac 100
此命令将完成这项工作,我们将新的二进制文件链接到java
和javac
替代方案,并将它们设置为默认值,赋予它们比旧版本更高的优先级(100)(2 - 通过update-alternatives --display java
&检查update-alternatives --display javac
,您也可以使用update-alternatives --query java
)。