1

我已经开始了一个项目,该项目专门说使用 1.6 JDK 来防止表单测试失败。 当我尝试将 JDK 从 1.7 更改为 1.6 时,我遇到了一个奇怪的行为。

即使我将环境变量从 1.7 更改为 1.6 JDK 版本,当我运行java.exe -versionjava -versionin 时cmd,它仍然提供早期版本。但是当我运行javac -version它时,它给出了 1.6 版本。

到目前为止我所做的是,

在用户环境变量中,

  • classpath to C:\Program Files\Java\jdk1.6.0_43(JDK安装路径)
  • 添加 java_home 变量并将路径更改为C:\Program Files\Java\jdk1.6.0_43(JDK 安装路径)
  • 更改为C:\Program Files\Java\jdk1.6.0_43\bin(Java bin)的路径

在系统环境变量中,

  • 添加C:\Program Files\Java\jdk1.6.0_43\binCLASSPATH
  • 创建 JAVA_HOME 变量并添加C:\Program Files\Java\jdk1.6.0_43\bin

有一个与 Java 相关的变量,称为 QLJAVA,路径设置为C:\Program Files (x86)\Java\jre7\lib\ext\QTJava.zip,我也删除了该变量。 我编辑之前,CLASSPATH这是相同的路径

我的问题

  1. 为什么在使用 java -version 时选择 1.7,为什么在运行时会给出不同的结果javac -version。或者我已经做的有什么问题吗?
  2. 什么是QLJAVA变量,它的用途是什么,最终是如何出现在系统变量中的。?

  3. 为什么改到1.6没有任何backword兼容性。?

4

2 回答 2

11

以下是为 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而不是程序文件。

要回答您的问题:

  1. 您的 PATH 环境变量指向 java 和 javac 的不同路径。只需将%JAVA_HOME%\binPATH 变量设置为第一个条目,它应该会选择您想要的正确版本的 JAVA。

  2. 至于QTJAVA,我还没有遇到过,所以无法给出具体的答案。至于它是如何到达那里的,嗯,一些软件/程序会在您安装它们时修改环境变量,以便它们以这种方式到达那里。

  3. 它应该向后兼容或尝试向后兼容。我没有看到代码,也没有真正尝试过足够长的 JDK 7,但是根据您提供的链接上的问题(https://tickets.openmrs.org/browse/TRUNK-3142),它看起来像 JDK 7 问题.

希望这可以帮助。

于 2013-03-27T06:22:00.157 回答
5

加载器java.exe通常放在Windows\System32目录中,但在 JDK 中也有副本。编译器javac.exe始终在 JDK 中。这是你所看到的根源。

副本很有可能java.exe出现在路径中早于Windows\System32\java.exe.

也有可能安装 v1.6 无法覆盖旧版本java.exe,因为您没有足够的写入权限Windows\System32,但在这种情况下应该提供错误。

我知道弄清楚发生了什么的最好方法是安装一个which.exe命令,你可以在 Cygwin 或 MinGW 中找到它。当您说 时which java.exe,您将看到java.exe导致问题的 v1.7 的路径。调整路径、删除或重命名文件。

于 2013-03-27T04:55:55.473 回答