我已经开始了一个项目,特别指出使用1.6 JDK来防止表单测试失败。当我试图将JDK从1.7更改为1.6时,我遇到了一个奇怪的行为。
即使我将环境变量从1.7改为1.6 JDK版本,当我在cmd
中运行java.exe -version
或java -version
时,它仍然给出较早的版本。但是当我运行javac -version
时,它给出了1.6版本。
到目前为止我所做的是,
在用户环境变量中
-
C:Program FilesJavajdk1.6.0_43
的类路径(JDK安装路径) - 添加java_home变量,并将路径更改为
C:Program FilesJavajdk1.6.0_43
(JDK安装路径) - 更改路径到
C:Program FilesJavajdk1.6.0_43bin
(Java bin)
在系统环境变量中
- 添加
C:Program FilesJavajdk1.6.0_43bin
到CLASSPATH
创建JAVA_HOME变量并添加
C:Program FilesJavajdk1.6.0_43bin
有一个与Java相关的变量,叫做QLJAVA, path被设置为C:Program Files (x86)Javajre7libextQTJava.zip
,我也删除了这个变量。在之前,我编辑了CLASSPATH
,这是与那里相同的路径
- 为什么使用java -version时选择1.7,为什么运行
javac -version
时给出不同的结果。还是我已经做错了什么? 什么是
QLJAVA
变量,它的用途是什么,如何使用最后变成了系统变量。为什么要改到1.6,难道没有向后兼容性吗?
以下是为java设置环境变量时的一些指导原则。
JAVA_HOME
应该指向java安装路径
PATH应该包含%JAVA_HOME%/bin
我通常将不同的java版本设置为不同的环境变量,并通过更改JAVA_HOME
。
JAVA_6=c:jdk6
JAVA_7=c:jdk7
JAVA_HOME=%JAVA_6% (or JAVA_HOME=%JAVA_7%)
PATH=%JAVA_HOME%bin;%PATH%
此外,路径中的一些其他条目可能指向不同版本的Java,因此我通常先添加%JAVA_HOME%bin
条目。
另外,当对环境变量进行更改时,您应该关闭并打开一个新的cmd实例来重新加载环境变量。
最后,路径上有空格也会有效果。您可能需要为它们添加引号,或者使用DOS的旧变量约定。如。PROGRA~1
代替Program Files.
回答您的问题:
您的PATH环境变量指向java和javac的不同路径。只要将
%JAVA_HOME%bin
设置为PATH变量的第一个条目,它就会选择您想要的正确JAVA版本。关于QTJAVA,我还没有遇到过,所以我不能给出一个具体的答案。至于它是如何到达那里的,好吧,一些软件/程序在你安装它们时修改了环境变量,所以它们就这样到达那里了。
它应该是向后兼容或试图是。我还没有看到代码,也没有真正尝试JDK 7足够长的时间,但根据你给的链接(https://tickets.openmrs.org/browse/TRUNK-3142)上的问题,它看起来像JDK 7的问题。
加载器java.exe
通常放在WindowsSystem32
目录中,尽管在JDK中也有副本。编译器javac.exe
总是在JDK中。这就是你所看到的一切的根源。
java.exe
的副本很有可能出现在路径中比WindowsSystem32java.exe
更早的文件夹中。
也有可能v1.6的安装无法覆盖旧的java.exe
,因为您没有足够的权限来写入WindowsSystem32
,尽管在这种情况下应该提供一个错误。
我知道弄清楚发生了什么最好的方法是安装which.exe
命令,你可以在Cygwin或MinGW中找到。当您输入which java.exe
时,您将看到导致问题的java.exe
v1.7的路径。调整路径、删除或重命名文件