java -version vs java -fullversion

时间:2015-02-26 17:59:47

标签: java

java -versionjava -fullversion之间有什么区别?

这两个似乎没有排在我的机器上。

C:\Users\kmort>java -fullversion
    java full version "1.8.0_20-b26"

C:\Users\kmort>java -version
    java version "1.8.0_25"
    Java(TM) SE Runtime Environment (build 1.8.0_25-b18)
    Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

This link (at the bottom)似乎表明fullversion只包含内部版本号。如果这是真的,当我运行这两个时,我最终会得到一个不同的答案?

请注意,this documentation忽略了完全引用fullversion

我在64位Windows 7上运行。如果有帮助,这是我机器上安装的JDK和JRE的屏幕截图。

enter image description here

更新


当我运行Window的where命令时,我得到以下内容:

C:\Users\kmort>where java
C:\Windows\System32\java.exe
C:\ProgramData\Oracle\Java\javapath\java.exe
C:\Program Files\Java\jdk1.8.0_25\bin\java.exe

问题在于java.exe位于System32。如果我将那个重命名为其他东西,事情就会按预期工作。而Oracle只是最后一个符号链接。

现在问题是为什么在我的java.exe文件夹中System32会发生这种情况? (我的最终目标是从java.exe文件夹中删除System32,但我想先了解一下发生了什么。)

更新2


使用Process Monitor,我可以看到当我在有问题C:\Windows\System32\java.exe上运行任一命令时,这是运行的可执行文件(请参阅LoadImage上调用C:\Windows\System32\java.exe的屏幕截图。两者中也有一些C:\Windows\SysWOW64\java.exe的引用。我不确定为什么。

enter image description here

另请注意,我的注册表似乎是正确的。 Currentversion是1.8。 enter image description here

另外请注意,C:\Windows\System32\java.exe上的时间戳是我知道我安装了JRE的那一天。

2 个答案:

答案 0 :(得分:2)

经过多次来回,看起来这是Java“更新”的副作用,不会更新系统目录中的Java可执行文件。

曾几何时,1.8.0_20-b26已经安装到这台机器上,它尽职尽责地放下了一个完整的JAVA_HOME,这个版本的注册表项,更新了注册表中的最新VM,还放了/ special / java 。%in WinSysDir%

在某些时候,可能通过Java更新程序工具更新了JVM,并且可能没有完整的安装程序(OP可以确认。)

这创建了一个新的JAVA_HOME,更新了注册表,甚至可能删除了旧的_20安装。但是,这是踢球者:它没有删除%WinSysDir%

中的java.exe

@kmort在可执行文件上运行了POSIX字符串,发现“1.8.0_20-b26”确实埋没在旧的可执行文件中。

所以,正在发生的事情是,对于-version选项,它会检查注册表中的最新JVM并使用选项调用它(或者只是从注册表中返回FullVersion - 我们直到我们跟踪系统调用) [它似乎实际上调用了可执行文件--jdv]。但是对于-fullversion,它只会返回可执行文件中的静态字符串!

我怀疑-version可以采用optarg这一事实意味着对这些选项的处理完全不同。

解决方案是:

  1. 只需删除%WinSysDir%

  2. 中的java.exe即可
  3. 使用它因为可能无害(除非-version处理实际调用不同的JVM,在这种情况下所有的注意都是关闭的)

  4. 使用Oracle提供的最新MSI从头开始重新安装Java 8.

  5. (3)应该替换%WinSysDir%(以及WOW64系统java.exe)中的java.exe。 (1)可能完全没问题。 (2)如果-version导致java.exe徘徊并调用不是最新的真实JRE,则可能是一个错误。

答案 1 :(得分:1)

我尝试重现结果,我在两个命令上都获得了相同的java版本。所以我认为,在Java文件夹中有多个JRE可能会导致结果不一致。

cmd结果

enter image description here

我的J:C:\ Program Files(x86)\ Java

enter image description here