我总是想知道为什么我必须在安装Java SDK后手动设置JAVA_HOME环境变量.
JAVA_HOME = c:\ Program Files\Java\jdk1.6.0_12
Visual Studio至少提供一个批处理文件来设置这些环境变量:
调用"c:\ Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
Java有类似的东西吗?我正在尝试制作一个构建脚本,该脚本应该在安装Java SDK之后才能工作.我不希望人们在PC上弄乱环境变量.
您可以根据需要安装任意数量的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(不要忘记通过"install",只能引用"复制":JDK/JRE并不总是由建立)
如果设置JAVA_HOME
,则可能会破坏某些脚本的默认行为.
不想打扰依赖于env var而没有设置声音的假设脚本对我来说毫无意义的偏执 - 如果脚本这样做,那么当安装一个JVM时,它显然要使用不同的JVM - 没有理由避免这种情况.
嗯......甜蜜.为了每天处理大量的部署问题(对于我店里的内部应用程序),我可以向你保证:这是非常理智的"偏执"待遇.
当您部署到(非常)大型用户集时,您不希望对其平台和配置做出任何假设."明显的WANTS"是我不敢做的假设(或者我将我的手机重定向到你的手机;)并且你处理了愤怒的电话.
例如,我们有许多脚本使用来自sun的1.4.2 JVM启动(JAVA_HOME未设置在开发平台上,默认路径直接设置在脚本中),或者使用来自JRockit的1.4.2(JAVA_HOME
设置,因为它是预期的目标)关于集成,预生产和生产平台).
但是我们定期安装新的JDK1.6.x,因为我们用它来启动eclipse.
假设那些脚本想要它们的JAVA_HOME
集合......并且不再有任何作用.
...... 罗伯特·格兰特(Robert Grant)对此进行了现场评论:
您正在描述需要一个特定版本的脚本,但仍然会查看全局JAVA_HOME.这只是糟糕的脚本.
虽然这可能或可能不是真的,但这也恰恰说明了我的观点:
"你不想做出任何假设":对他们的平台/设置没有假设,也没有假设他们的"最佳实践".
前者可能听起来很偏执,后者是普通常识:认为你的产品(这里是一个JDK设置)不会破坏用户环境中的任何东西,因为用户"正确"地想出了他的脚本......会疯了.
GvS建议:
或者它可以选择执行此操作,默认情况下禁用
这意味着在设置屏幕中包含另一个选项,应该由用户仔细审查,并且可能会产生意想不到的后果,即使用户选择它认为他知道自己在做什么......
这根本不值得.
我不认为JAVA_HOME是Sun发明或支持的约定.
他们可能还记得CLASSPATH环境变量**的惨败,并且更喜欢让它远离环境变量.
**鼓励这是在早期Java SDK和文献中设置JVM类路径的主要方法,并导致用户和各种应用程序弄乱环境变量,覆盖彼此的更改并依赖于相互矛盾的内容.