在Ubuntu 16.04上安装最新的Oracle JDK(8或9)时,我发现了几个讨论:
https://askubuntu.com/questions/521145/how-to-install-oracle-java-on-ubuntu-14-04
https://askubuntu.com/questions/159575/how-do-i-make-java-default-to-a-manually-installed-jre-jdk
我把他们的方式总结为以下几点:
有的用
update-alternatives
.其中,有些用它来表示java
,javac
和javaws
(例子),而有些则将其用于更多命令( 例子,例子,例子,例子)。我不确定哪一个给出了要应用的命令的完整列表update-alternatives
。一些使用
update-java-alternatives
(例子,例子, ), 但有人说它不适用于手动安装。有些同时使用
update-alternatives
和update-java-alternatives
(例子)有些人改变了几个环境变量,并认为前两种方法不必要地复杂(例子, )
有些同时使用
update-alternatives
和更改多个环境变量:(例子)
我想知道推荐哪种方式?
谢谢。
答案1
当我说我推荐update-java-alternatives
Java 替代方案时,我假设安装的任何 Java 提供程序都提供了必要的基础结构。 Debian 及其衍生版本中提供的 OpenJDK 软件包就是这种情况,但其他 JDK 软件包不一定如此,手动安装的 JDK 也不太可能出现这种情况。使用创建的 Oracle JDK 包java-package
做提供必要的基础设施。我认为手动设置所有 Java 命令的替代方案是浪费人们时间的明智之举:如果您想安装 Oracle JRE 或 JDK,请使用java-package
.
重点update-java-alternatives
是允许默认 JRE/JDK 工具的设置保持一致。理论上,这可以通过使用update-alternatives
“--slave
关系”来完成。然而,这通常不适用于 OpenJDK 软件包,因为您可以安装可用工具的子集,而这update-alternatives
并不能解决问题。因此创建了update-java-alternatives
,它可以处理任何工具是安装完毕,没有抱怨任何其他事情。为了update-java-alternatives
正常工作,JRE/JDK 包必须在/usr/lib/jvm
(例如 .java-1.8.0-openjdk-amd64.jinfo
)。 (update-alternatives
显然,基于 RPM 的发行版确实可以解决这个问题,但我还没有研究细节。)
Java 本身有自己的方式在多个已安装的 JRE/JDK 中进行选择,即JAVA_HOME
环境变量。update-java-alternatives
和JAVA_HOME
确实是互补的:应该可以根据您的要求将两者设置为指向不同的 JRE/JDK。update-java-alternatives
允许系统管理员指定哪个 JRE/JDK 应该是系统上的默认值(事实上,人们可能会认为它允许包维护者指定哪个应该是默认值 - 这一切都应该对管理员和用户透明地工作)。JAVA_HOME
允许任何用户或启动脚本指定在特定环境中应使用哪个 JRE/JDK。在 Unix 风格的系统上,事情有些崩溃的地方是PATH
-handling,因为PATH
不能设置为动态使用JAVA_HOME
choicejava
等javac
(与 Windows 不同);因此,如果您希望默认值等跟踪您的设置(添加到 的开头),您需要记住PATH
在更改 时重新设置您的。JAVA_HOME
java
JAVA_HOME
$JAVA_HOME/bin
PATH
所有这一切的收获与我的回答类似设置环境变量可以替代使用“update-alternatives”吗?:系统管理员应该使用update-java-alternatives
为系统定义默认的JRE/JDK(或让软件包自行选择),用户可以使用JAVA_HOME
为特定环境定义JRE/JDK。