java - C :\ProgramData\Oracle\Java\javapath\java. exe使用哪个JRE?

标签 java

我试图弄清楚 java 使用哪个环境变量来查找/检测 C:\ProgramData\Oracle\Java\javapath\java.exe 使用的 JRE。

按照 Oracle 的设计,我在 C:\ProgramData\Oracle\Java\javapath\ 中仅有的文件是

  • java.exe
  • javaw.exe
  • javaws.exe

如果我将 JAVA_HOME 设置为空或某个随机文件夹,使用 java.exe 运行应用程序仍然有效。所以我只能假设它没有使用 JAVA_HOME 值。那么它是如何找到JRE文件夹的呢?它默认为特定的东西吗?我也没有设置 JRE_HOME 变量。

最佳答案

截至 2018 年,特别是关于 Oracle Java,您可能会发现您的 Java 运行时是通过以下两种方式之一安装的:

包含文件符号链接(symbolic link)的常规目录

如果您查看 C:\ProgramData\Oracle\Java\javapath\ 中的文件,您会发现它们实际上是特定 java 二进制文件的符号链接(symbolic link)。

2015-11-13  06:11 PM    <SYMLINK>      java.exe [C:\Program Files\Java\jre1.8.0_65\bin\java.exe]
2015-11-13  06:11 PM    <SYMLINK>      javaw.exe [C:\Program Files\Java\jre1.8.0_65\bin\javaw.exe]
2015-11-13  06:11 PM    <SYMLINK>      javaws.exe [C:\Program Files\Java\jre1.8.0_65\bin\javaws.exe]

包含常规文件的目录连接

使用最新(64!位)的 Java 8 安装实际上预置到系统路径另一个位置:c:\Program Files (x86)\Common Files\Oracle\Java\java路径。 这次,javapath 本身就是连接点:

2018-07-21  05:59 PM    <JUNCTION>     javapath [C:\Program Files (x86)\Common Files\Oracle\Java\javapath_target_172906453]
2018-07-21  05:59 PM    <DIR>          javapath_target_172906453

现在,有趣的是,javapath_target_... 文件夹中的 java.exe 等不是符号链接(symbolic link)。这些文件使用此注册表位置查找 JRE 和 JDK 版本:

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment]
"CurrentVersion"="1.8"

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8]
"JavaHome"="C:\\Program Files\\Java\\jre1.8.0_65"

关于java - C :\ProgramData\Oracle\Java\javapath\java. exe使用哪个JRE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49540325/

相关文章:

java - 尝试从 servlet 连接到 Oracle XE 时出现 ORA-01017 错误

java - DAO 层上的 Junit 测试为 postgresql exists() 查询返回错误结果

java - 选择信息丰富的类名

java - 为什么它只取数组中的第一个元素?

JAVA clone() 复制对象到其他类对象

java - 错误 - 无法解析导入 com.google.android.gms.ads

java - GoogleApiClient 尚未连接异常

java - 如果文本文件不存在则创建一个文本文件,如果存在则使用 Java BufferedWriter 附加到它

java - 字符串日期时间转换为 LocalDateTime 对象

java - Python 可以识别 Java 中使用 BCrypt 的哈希密码吗?