【问题标题】:Different Java version showing on command line命令行上显示不同的 Java 版本
【发布时间】:2012-11-23 22:08:52
【问题描述】:

我最近检查了我的 Java 版本。我运行了命令java -version,发现我正在使用java version 1.7.0_09。但是当我试图检查C:\Program Files\Java\ 目录时,我似乎没有找到相同的版本。我只看到以下内容:

  • j2re1.4
  • jdk1.6.0_32
  • jdk1.7.0_06
  • jdk1.7.0_07
  • jre6
  • jre7

等等……

我的程序仍在运行,但我只是尝试手动编译所有内容,并了解操作系统如何处理 Java。

另一件奇怪的事情是,我尝试检查环境变量设置,但它没有说明jdk1.7.0_09

路径:

  • C:\Program Files\Common Files\Microsoft Shared\Windows Live;
  • %SystemRoot%\system32;
  • %SystemRoot%;
  • %SystemRoot%\System32\Wbem;
  • %SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;
  • C:\Program Files\TortoiseSVN\bin;
  • C:\Program Files\Windows Live\Shared;
  • C:\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.6.5\appengine-java-sdk-1.6.5\bin;
  • C:\Program Files\Java\jdk1.7.0_07\bin;C:\Program Files\QuickTime\QTSystem\;
  • %ANT_HOME%\bin

只是想让你们知道它以某种方式自动变成了 jre。

完整的目录是C:\Users\User02\AppData\LocalLow\Sun\Java\jre1.7.0_09,它只是得到名为lzma.dll 的文件。

但是,我有另一个目录,上面写着C:\Users\User02\AppData\LocalLow\Sun\Java\jdk1.7.0_07。里面的文件是:

  • jdk1.7.0_07.msi
  • sj170070.cab
  • ss170070.cab
  • st170070.cab
  • 和sz170070.cab

【问题讨论】:

  • 只有我一个人,还是该列表中有两个同名目录?
  • 如果您没有明确指定路径,您将获得任何设置的路径,就像您计算机上的任何其他程序一样。 编辑:参见:computerhope.com/issues/ch000549.htm
  • 在windows中使用搜索,找到java的所有实例。您的路径指向其中一个位置,如果您只需键入 java
  • 我得到了目录,我在这个位置找到了它。 C:\Users\User02\AppData\LocalLow\Sun\Java。我使用了关键字1.7.0_09
  • 安装 JDK 会将驱动程序 java.exe 放入 %SYSTEMROOT%\System32。您可以删除它,或者确保您要使用的 JDK 在 %SYSTEMROOT%\System32 条目之前的路径上。

标签: java cmd version


【解决方案1】:

一台计算机上可以并排放置多个 JRE。

如果在 Windows 上正确安装了 JRE,则有关每个版本的信息都会存储在注册表中。安装过程会在系统 PATH (%SYSTEMROOT%\System32) 中安装一个特殊的 java.exe。所以你不需要改变你的路径,因为这个特殊的 java.exe 会找到当前的 JRE。在命令行中,键入 java -version 以显示当前安装的 jre 版本。

在 1.6 版中,现在可以选择与上一个不同的 JRE 安装,而无需修改任何注册表。

JRE 安装列在注册表中的键

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java 运行时环境

参加这个简单的测试课

public class ShowVersion {
 public static void main(String args[]) {
   System.out.println(System.getProperty("java.version"));
 }
}

在安装了 1.6 和 1.5 的系统上。如果你输入

> java ShowVersion

可能会使用 1.6 JRE,因为它是最后一次安装的。

要强制使用 1.5 JRE,请使用此命令行。

> java -version:"1.5" ShowVersion

如果字节码与给定的 JRE 不兼容,那么 .. 它当然不会工作。

参考:technote java 6

您始终可以提供使用特定安装的完整路径。以这种方式启动 JVM 根本不使用注册表设置。

>"C:\Program Files\Java\j2re1.4.1_02\bin\java" -version
java version "1.4.1_02"

来源:Select a particular JRE from the command line

【讨论】:

  • 此功能已从JDK9 中删除,可悲的是。
【解决方案2】:

添加以下内容将解决您的问题:

set JAVA_HOME="your jdk path"
set PATH=%JAVA_HOME%\bin;%PATH%.

此外,如果它不起作用,这意味着您已经为多个 java 版本设置了 PATH,请仅包含最新版本并从 PATH 变量中删除所有变量。

【讨论】:

    【解决方案3】:

    您评论中的 AppData 路径不在您的路径上(假设无论如何),所以它可能不是它使用的路径。不幸的是,Windows 上也没有which 命令。

    如果您编辑路径并将C:\Program Files\Java\bin 目录移动到列表的最开头,它仍然打印1.7.0_09,那么您的JDK7u7 文件夹中就有JDK7u9。如果没有,请浏览到路径上的所有其他目录并逐一打开它们,直到找到合适的 java 文件。幸运的是,你的路比我的短很多

    注意在做的时候:

    > java -version
    

    它还可能会查找java.bat 和其他非exe 扩展名,因此在搜索路径时请注意这一点。尝试运行:

    > java.exe -version
    

    这样你知道你正在寻找一个exe文件。

    您可以尝试的最后一件事:

    > "C:\Program Files\Java\jdk1.7.0_07\bin\java" -version
    

    如果这返回 1.7.0_09,那么发生了一些事情,就地更新了你的 JDK,这是不应该发生的,AFAIK(但我可能是错的)。

    【讨论】:

      【解决方案4】:

      回答“实际”问题:

      另一件奇怪的事情是,我试图检查环境 变量设置,并没有说明jdk1.7.0_09。

      这里发生的事情是您安装了 jdk1.7.0_07,然后自动升级了它。发生这种情况时,它仍会使用您最初安装到的旧文件夹名称。

      安装Java后,我通常会复制JDK目录并用版本号命名。然后,我可以像这样直接调用某个java:

      @echo off
      :: testjava.bat
      set JAVA_HOME=C:\JDK1.x.xx
      set PATH=%JAVA_HOME%\bin;%PATH%;.
      java -version
      pause
      

      所以,我的建议是设置您的 JAVA_HOME 系统变量和 PATH 变量,如上所示。这将覆盖您系统上的所有内容,以便您选择的 JDK 是 JRE 的默认值。

      【讨论】:

      • 您确定 JDK 可以自动更新吗? (Relevant question.) 我以为只有 JRE 有自动更新功能。
      • 确实如此。在这种情况下,这就解释了为什么 java JRE 安装到以 java 的主要版本命名的目录中的 Program Files 并且不包括次要版本或内部版本号。那是因为它会自动升级。因此,在这种情况下,他的系统将更新后的 JRE7 指向默认 java,并且该 java 的版本已自动升级到次要修订版 09。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 2020-03-15
      • 2014-02-11
      • 2020-10-04
      相关资源
      最近更新 更多