# java.path 库模块帮助文档

<details>  <summary>搜索目录规则</summary>  <p>

1、JDK HOME 指定是 Java 编译器根目录

搜索目录的优先顺序：
1、用户调用 java.path.setJdkHome() 设置的目录
2、进程环境变量 %JAVA_HOME% 设置的目录
3、搜索包含 javac.exe 的目录,这会检查%Path% 环境变量里的所有目录
4、自注册表查找 JDK 目录
5、搜索默认安装位置等

2、JRE HOME 指定是 Java 运行时器根目录

搜索目录的优先顺序：
1、用户调用 java.path.setJreHome() 设置的目录
2、用户调用 java.path.setJdkHome()，j 设置的目录
3、进程环境变量 %JRE_HOME% 设置的目录
4、进程环境变量 %JAVA_HOME% 设置的目录
5、搜索包含 javac.exe 的目录,这会检查%Path% 环境变量里的所有目录
6、自注册表查找 JDK 目录
7、搜索默认安装位置等。

JVM 也是在 JRE 目录下查找，搜索顺序基本如上， 
但搜索 JVM 会排除 64位JRE，仅查找包含可用的 32 位 jvm.dll。
JVM 用于调用 java 构造函数创建虚拟机，例如：
`var jvm = java()` 创建 Java 虚拟机或者调用任何获取 JVM 目录以后，
如果成功获取到可用的 JVM 路径，那么在一个进程实例中将不能再以任何方式修改 JVM 路径，
调用 java.path.setJreHome() 或修改 %JRE_HOME% 环境变量都不能再改变 JVM 路径。 

在调用 java.openProcess,java.popenProcess 创建 Java 进程时，
则优先查找64 位 JRE 运行时目录下的 java.exe, javaw.exe。
也可以支持 32 位 JRE。

</p></details>

## java.path 成员列表 <a id="java.path" href="#java.path">&#x23;</a>

### java.path.findJre() <a id="java.path.findJre" href="#java.path.findJre">&#x23;</a>
参数指定的 JRE 根目下是否包含 java.exe,javaw.exe  
成功返回 JRE 目录

### java.path.findJvm() <a id="java.path.findJvm" href="#java.path.findJvm">&#x23;</a>
参数指定的 JRE 根目下是否包含有效 jvm.dll  
成功返回 true

### java.path.jdkHome() <a id="java.path.jdkHome" href="#java.path.jdkHome">&#x23;</a>
用于获取 JDK 编译器根目录  
关于初始化JDK,JRE目录的规则细节请参考 java.path 库函数文档

### java.path.jdkHomeFromRegistry <a id="java.path.jdkHomeFromRegistry" href="#java.path.jdkHomeFromRegistry">&#x23;</a>
自注册表查找安装的 JDK 目录

### java.path.jdkHomeFromRegistry(x64,version) <a id="java.path.jdkHomeFromRegistry" href="#java.path.jdkHomeFromRegistry">&#x23;</a>
自注册表查找安装的 JDK 目录,  
找到目录则返回 JDK 根目录,内部版本号,  
所有参数可选,@x64 指定是否查询 64位注册表,32位系统忽略此参数,  
version 用一个字符串指定内部版本号,  
例如 Java 8 的内部版本号为 "1.8"

### java.path.jreBin() <a id="java.path.jreBin" href="#java.path.jreBin">&#x23;</a>
返回 JRE 运行时目录下的 /bin 目录  
关于初始化JDK,JRE目录的规则细节请参考 java.path 库函数文档

### java.path.jreHome() <a id="java.path.jreHome" href="#java.path.jreHome">&#x23;</a>
查找包含  64位 或 32位 java.exe,javaw.exe 的  
JRE 运行时目录，用于调用 java.openProcess,java.popenProcess   
以创建 Java 进程。搜索顺序为（64位优先）：  

关于初始化JDK,JRE目录的规则细节请参考 java.path 库函数文档

### java.path.jreHomeFromProgramFiles(version,x64,jdkOnly) <a id="java.path.jreHomeFromProgramFiles" href="#java.path.jreHomeFromProgramFiles">&#x23;</a>
在默认安装目录搜索 JRE  目录,  
可选用 @version 指定版本,  
@x64 如果为 true 则仅搜索 64 位 JRE,32位系统忽略此参数,  
@jdkOnly 如果为 true 则仅搜索 JDK 目录

在默认安装目录搜索 JRE  目录,  
可选用 @version 指定版本,  
@x64 如果为 true 则仅搜索 64 位 JRE,32位系统忽略此参数,  
@jdkOnly 如果为 true 则仅搜索 JDK 目录

### java.path.jreHomeFromRegistry <a id="java.path.jreHomeFromRegistry" href="#java.path.jreHomeFromRegistry">&#x23;</a>
自注册表查找安装的 JRE 目录

### java.path.jreHomeFromRegistry(x64,version) <a id="java.path.jreHomeFromRegistry" href="#java.path.jreHomeFromRegistry">&#x23;</a>
自注册表查找安装的 JRE 目录,  
找到目录则返回 JDK 根目录,内部版本号,  
所有参数可选,@x64 指定是否查询 64位注册表,32位系统忽略此参数,  
version 用一个字符串指定内部版本号,  
例如 Java 8 的内部版本号为 "1.8"

### java.path.jvm() <a id="java.path.jvm" href="#java.path.jvm">&#x23;</a>
用于获取创建 Java 虚拟机的 32 位 jvm.dll 路径,  
此路径初始化成功即不允许修改，  
关于初始化JDK,JRE目录的规则细节请参考 java.path 库函数文档

### java.path.jvmHome() <a id="java.path.jvmHome" href="#java.path.jvmHome">&#x23;</a>
包含可创建 Java 虚拟机的 JRE 运行时根目录,  
此路径一旦获取成功在当前进程中即不允许再修。  
，  
关于初始化JDK,JRE目录的规则细节请参考 java.path 库函数文档

### java.path.setJdkHome() <a id="java.path.setJdkHome" href="#java.path.setJdkHome">&#x23;</a>
指定第一优先级检测的 JDK 根目录，  
在该目录下查找 Java 编译器 javac.exe 。  
如该目录不符合要求则继续搜索其他合适的目录。

### java.path.setJreHome() <a id="java.path.setJreHome" href="#java.path.setJreHome">&#x23;</a>
指定第一优先级检测的 JRE 运行时根目录，  
在该目录下查找64位或32位 java.exe,javaw.exe 以调用  
java.openProcess,java.popenProcess 创建 Java 进程。  
优先在该目录下搜索 JVM 用于创建 java 虚拟机对象，  
如该目录不符合要求则继续搜索其他合适的目录。
