我正在试图弄清楚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
var。
答案 0 :(得分:7)
如果查看C:\ProgramData\Oracle\Java\javapath\
中的文件,您会发现它们实际上是到特定Java二进制文件的符号链接。
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\javapath
上。
这次,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
等不是符号链接。这些文件使用以下注册表位置查找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"
答案 1 :(得分:4)
这会给你一个想法:
java -verbose | more
答案 2 :(得分:2)
这些“新的” JDK 8/64位行为是如此令人困惑,我无法猜测为什么我的应用程序无法启动,因为我有JDK(带有专用JRE)和每个路径变量设置,但仍然没有启动。 一段时间后,我单独安装了JRE8,它开始工作了。首先,regedit-密钥仅由公共JRE编写。...好吧。
然后,我想知道该应用程序使用了哪个运行时,我将所有java * .exe重命名,但仍能正常工作。64位我重命名了全新的regedit密钥。仍然有效...
故事的结尾:在Windows 64中,regedit密钥位于
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft
(32位)和
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\JavaSoft
(64位)
我的应用正常运行是因为
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment\1.8\RuntimeLib\
指向崇敬符号链接的jvm.dll。我需要啤酒,我想要另一份工作:-)
这是一个很好的链接,它解释了Regedit-Keys和Java用来执行的不同“发现方法” 找到最新安装的版本:
http://mindprod.com/jgloss/registry.html
仍然是SYSLink-使用JDK8进行的更改似乎是未记录的更改,是在JRE8u171之前引入的。
我的sysLink路径为C:\Program Files (x86)\Common Files\Oracle\Java
,实际上是子目录的连接点。
然后,JDK8安装程序会将java * .exe文件复制到Windows \ System32 \ btw中。
更多信息:
http://makble.com/jdk-8-and-cprogramdataoraclejavajavapath-C:\ProgramData\Oracle\Java\javapath
(在Windows 10上)是什么意思?
https://community.oracle.com/thread/4143254 https://douglascayers.com/2015/05/30/how-to-set-custom-java-path-after-installing-jdk-8/
对不起,我现在很沮丧。我希望它可以帮助其他人。
答案 3 :(得分:0)
示例:
C:\>java -verbose 2>nul | findstr /I opened
[Opened C:\Program Files\Java\jre1.8.0_201\lib\rt.jar]
示例:
C:\>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" /s
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
CurrentVersion REG_SZ 1.8
BrowserJavaVersion REG_SZ 11.201.2
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8
RuntimeLib REG_SZ C:\Program Files\Java\jre1.8.0_201\bin\server\jvm.dll
JavaHome REG_SZ C:\Program Files\Java\jre1.8.0_201
MicroVersion REG_SZ 0
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8.0_201
JavaHome REG_SZ C:\Program Files\Java\jre1.8.0_201
MicroVersion REG_SZ 0
RuntimeLib REG_SZ C:\Program Files\Java\jre1.8.0_201\bin\server\jvm.dll
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8.0_201\MSI
INSTALLDIR REG_SZ C:\Program Files\Java\jre1.8.0_201\
JU REG_SZ
OEMUPDATE REG_SZ
FROMVERSION REG_SZ NA
FROMVERSIONFULL REG_SZ
PRODUCTVERSION REG_SZ 8.0.2010.9
EULA REG_SZ
JAVAUPDATE REG_SZ 1
AUTOUPDATECHECK REG_SZ 1
AUTOUPDATEDELAY REG_SZ
FullVersion REG_SZ 1.8.0_201-b09
C:\>
注意:如果您只关心版本号,则可能要尝试使用PowerShell的“ get-command”:
PS C:\> Get-Command java | ft -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Application java.exe 8.0.201.9 C:\Program Files (x86)\Common
Files\Oracle\Java\javapath\java.exe
答案 4 :(得分:0)
好吧,我想这就是您想要的答案...
环境变量Path
在其顶部添加C:\Program Files (x86)\Common Files\Oracle\Java\javapath
。因此,您的JAVA_HOME
的优先级较低。
以上其他答案可能解释了此路径的工作原理。