从JDK到(包括)JRE,Java.exe有什么区别?

4
因此,我一直认为在jdk\bin和jdk\jre\bin文件夹中都有的java.exe没有区别。但显然事实并非如此,至少对于java8来说是这样。 我正在测试maverick ssh库,发现当使用位于jdk \ bin中的java.exe时,它无法从sshd服务器提供的加密密码列表中自动协商一个加密密码。 将java.exe更改为jdk所提供的jre中的那个(位于jdk\jre\bin文件夹中)可以让测试应用程序正常工作。那么...可能会出现什么情况来解释这种差异 - 如果它们完全相同,为什么一个java.exe工作而另一个不工作呢?他们表面上看起来是一样的:
C:\Program Files\Java\jdk1.8.0_20>dir bin\java.exe

08/22/2014  03:35 PM           190,856 java.exe

C:\Program Files\Java\jdk1.8.0_20>dir jre\bin\java.exe

08/22/2014  03:35 PM           190,856 java.exe

但是在底层实现上必须有所不同:

C:\Program Files\Java\jdk1.8.0_20>diff bin\java.exe jre\bin\java.exe
Files bin\java.exe and jre\bin\java.exe differ

编辑

我已经审查了被建议为重复的问题,但它没有回答我的问题。

这些二进制文件的版本似乎相同:

C:\Program Files\Java\jdk1.8.0_20>bin\java -version
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)

C:\Program Files\Java\jdk1.8.0_20>jre\bin\java -version
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)

除了 java.exe 的路径,我在命令行上没有调整 classpath 或其他任何内容。

使用 WinMerge 比较两者...这两个文件的开头和结尾有一些区别(尤其是结尾)。对我来说都是二进制乱码。

enter image description here


可能存在一些不同的头信息 - Tom
可能是difference between bin's java.exe and jre's java.exe?的重复问题。 - idontevenseethecode
1
@angstadt530:可能,但是Jon指出他的文件实际上是不同的,这个问题并没有说明。 - T.J. Crowder
1个回答

2

重复使用该库并获得不同结果,几乎肯定与 java.exe 无关,而与 JDK 安装和 JRE 安装所使用的类路径和 jar 包有关。

关于您不同的文件,不仅仅是您自己遇到这个问题:我找到了一个安装有 (旧版) Oracle Java8 的 Windows 8.1 机器,情况也一样:大小、日期和版本号相同,但内容不是完全相同的。我的 Linux 系统上安装的 Oracle Java8 并没有这个问题,在那里 jdk/bin/javajdk/jre/bin/java 文件是相同的(而且不只是符号链接)。我猜测这可能与优化默认值有关,但与您的 ssh 库问题无关。


好吧,这不是第一次优化导致了问题。 - Jon
接受这个提议,因为它似乎是最合理的。 - Jon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接