求助:如何让Jython脚本通过java -verbose -version获取Java17的JRE根路径
解决不同Java版本JRE根路径获取问题
问题原因
Java 17调整了java -verbose -version的输出格式,不再生成包含"Opened"的行,导致原findstr匹配规则无法获取到路径。
通用解决方案
改用java -XshowSettings:properties -version命令,该命令在Java 8/11/17及后续版本中都会输出java.home属性,直接对应JRE根路径。修改后的Jython脚本命令如下:
START SHELL COMMAND "java -XshowSettings:properties -version 2>&1 | findstr /I "java.home"" WAIT RETURNSTDOUT
2>&1:将错误输出重定向到标准输出,确保捕获到所有输出内容(部分Java版本中-XshowSettings的输出会发送到错误流)- 提取到的
java.home值即为目标JRE根路径
其他补充说明
- 关于
where javac无效的问题:javac是JDK专属工具,JRE环境中不存在该命令,因此无法通过它定位JRE路径;即使是JDK环境,Java 8的JRE位于JDK目录下的jre子文件夹,而Java 11+的JDK已内置JRE,路径逻辑不一致,所以该方法通用性极差。 - 若依赖环境变量,可直接读取
JAVA_HOME:但需注意Java 8的JAVA_HOME通常指向JDK,需拼接/jre得到JRE路径;Java 11+的JAVA_HOME直接对应运行时路径,这种方法依赖环境变量的正确配置,可靠性不如命令行提取。
内容的提问来源于stack exchange,提问作者Anna Ariffin
相关产品推荐
相关产品推荐

