如何在Linux Shell中可靠获取单行Java运行时版本信息
问题:在Linux Shell中可靠获取
java.runtime.version的值 需要在Linux Shell里获取Java的java.runtime.version属性值,要求方法可靠、具备前瞻性,兼容不同厂商的JDK。之前尝试过两种方式但都有问题:
- 使用
java -version配合grep/sed处理:输出内容随厂商和版本变化,稳定性差 - 使用jshell执行代码:输出包含多余的命令反馈(如
->前缀),无法直接得到纯版本值
示例中期望仅得到21+35-LTS这类纯版本字符串。
解决方案
方法一:Java 11+ 推荐方案(直接调用单行执行)
Java 11及以上版本支持java -e参数直接执行单行代码,直接通过Java API获取属性,输出干净无多余内容,完全不受厂商输出格式影响:
java -e 'System.out.println(System.getProperty("java.runtime.version"))'
方法二:优化jshell输出(兼容Java 9+)
如果依赖jshell,可以通过管道过滤掉无关输出,精准提取版本值:
printf $'System.out.println(System.getProperty("java.runtime.version"));\n/exit\n' | jshell -s | sed -n 's/.*-> //p' | grep -v "%$"
该命令会过滤掉->前缀行和结尾的%符号,仅保留版本字符串。
方法三:兼容Java 8及更早版本
对于Java 8及以下版本,可通过临时编译执行简单类来获取属性,执行后自动清理临时文件:
echo 'public class GetRuntimeVersion { public static void main(String[] args) { System.out.println(System.getProperty("java.runtime.version")); } }' > GetRuntimeVersion.java && javac GetRuntimeVersion.java && java GetRuntimeVersion && rm GetRuntimeVersion.java GetRuntimeVersion.class
内容的提问来源于stack exchange,提问作者jaw
相关产品推荐
相关产品推荐

