您可以安装任意多个版本的 Java。
安装程序修改本地环境变量(例如 )会很危险JAVA_HOME
,因为它可能会引用现有的 Java 安装。
这与所谓的“平台相关问题”无关。;)
由于脚本可能依赖于JAVA_HOME
自己启动,再次,这对于新的 Java 安装进行修改将是灾难性的JAVA_HOME
:所有这些脚本将突然必须使用新的可能不兼容的 JVM 启动。
另外,通过设置$JAVA_HOME/bin
或%JAVA_HOME%/bin
在您的路径中,您可以动态更改JAVA_HOME
为您想要使用的任何 Java 版本,而无需过多使用 PATH 变量。
Michael Borgwardt在评论中提出了有趣的后续问题
尽管如此,这并不能解释为什么安装程序在以前根本没有设置 JAVA_HOME 时没有设置它。
答案很简单:
安装程序无法知道脚本是否已经依赖JAVA_HOME
于.
含义:某些脚本可以测试JAVA_HOME
值,如果未设置,则引用安装在其他地方的另一个 JVM(不要忘记,通过“安装”,只能引用“复制”:JDK/JRE 并不总是由设置)
如果设置JAVA_HOME
,这可能会破坏某些脚本的默认行为。
不想打扰依赖于未设置 env var 的假设脚本对我来说听起来毫无意义的偏执 - 如果脚本这样做,那么它显然希望在安装时使用不同的 JVM - 没有理由避免这种情况。
嗯……甜。对于每天处理大量部署问题(用于我商店的内部应用程序),我可以向您保证:拥有它是非常理智的“偏执狂”对待。
当您部署到(非常)大量用户时,您不想对他们的平台和配置做出任何假设。“显然想要”是我不敢做出的假设(或者我将手机重定向到您的手机;)并且您处理愤怒的电话)。
例如,我们有许多脚本使用 sun 的 1.4.2 JVM 启动(开发平台上未设置 JAVA_HOME,直接在脚本中设置默认路径),或者使用 JRockit 的 1.4.2(JAVA_HOME
设置,因为它是预期目标集成、预生产和生产平台)。
但是我们会定期安装新的 JDK1.6.x,因为我们使用它来启动 eclipse。
假设那些脚本想要他们的JAVA_HOME
设置......并且没有任何效果了。
... 罗伯特格兰特对此进行了现场评论:
您正在描述需要一个特定版本的脚本,但仍然查看全局 JAVA_HOME。那只是经过深思熟虑的脚本。
虽然这可能是真的,也可能不是,但这也准确地说明了我的观点:
“你不想做任何假设”:不假设他们的平台/设置,也不假设他们的“最佳实践”。
前者可能听起来偏执,后者是普通常识:认为您的产品(这里是 JDK 设置)不会破坏用户环境中的任何内容,因为用户“正确”地考虑了他的脚本......这太疯狂了。
GvS建议:
或者它可以选择这样做,默认情况下禁用
这将意味着在设置屏幕中包含另一个选项,该选项应该由用户仔细查看,并且可能会产生意想不到的后果,即使用户选择它时认为他知道自己在做什么......
这根本不值得。