java -version
和java -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的屏幕截图。
更新
当我运行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
的引用。我不确定为什么。
另请注意,我的注册表似乎是正确的。 Currentversion是1.8。
另外请注意,C:\Windows\System32\java.exe
上的时间戳是我知道我安装了JRE的那一天。
答案 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这一事实意味着对这些选项的处理完全不同。
解决方案是:
只需删除%WinSysDir%
使用它因为可能无害(除非-version处理实际调用不同的JVM,在这种情况下所有的注意都是关闭的)
使用Oracle提供的最新MSI从头开始重新安装Java 8.
(3)应该替换%WinSysDir%(以及WOW64系统java.exe)中的java.exe。 (1)可能完全没问题。 (2)如果-version导致java.exe徘徊并调用不是最新的真实JRE,则可能是一个错误。
答案 1 :(得分:1)
我尝试重现结果,我在两个命令上都获得了相同的java版本。所以我认为,在Java文件夹中有多个JRE可能会导致结果不一致。
cmd结果
我的J:C:\ Program Files(x86)\ Java