Java无内置API判断LTS版本,需结合Runtime.version().feature()(Java 9+)或解析java.version(Java 8及以前)获取主版本号,并比对硬编码的LTS集合Set.of(8, 11, 17, 21)。

Java本身没有直接提供API来判断当前JDK是否为LTS(长期支持)版本,但可以通过获取JDK版本号,结合已知的LTS版本列表进行逻辑判断。关键在于:LTS是人为定义的发布策略,不是JVM内置属性,因此需在代码中维护或查询权威LTS标识规则。
获取当前JDK主版本号
从Java 9开始,Runtime.version() 或系统属性 java.version 可提取主版本号。推荐使用 Runtime.version().feature() 获取整数形式的主版本号(如 Java 17 → 17,Java 21 → 21),它比解析字符串更可靠。
- Java 8及之前:用
System.getProperty("java.version")解析,例如"1.8.0_301"→ 主版本为8 - Java 9及以上:调用
Runtime.version().feature()直接返回 int 类型主版本号 - 注意:Java 10–17之间只有11和17是LTS;Java 17之后,每两年一个LTS(17、21、23?不,23不是LTS——实际是17、21、23?等等,官方LTS是17、21、23?错,Oracle官方LTS版本为:8、11、17、21;23是短期版,24也不是LTS;下一个LTS是25,预计2025年9月发布)
维护公认的LTS版本列表
硬编码主流LTS版本号是最简单可行的方式。截至2024年,被广泛认可的LTS版本包括:8、11、17、21(由Oracle、Adoptium/Eclipse Temurin、Amazon Corretto等主流供应商共同支持)。Java 23明确标注为非-LTS版本。
- 可定义静态集合:
private static final Set<integer> LTS_VERSIONS = Set.of(8, 11, 17, 21);</integer> - 若运行时主版本号存在于该集合中,即可判定为LTS
- 未来新增LTS(如2025年的Java 25),只需更新集合,无需改逻辑
兼容Java 8及更早版本的写法
若需支持Java 8(无 Runtime.version()),可用反射或字符串解析回退。建议封装统一获取主版本的方法:
立即学习“Java免费学习笔记(深入)”;
- 先尝试
Runtime.version().feature()(Java 9+) - 捕获
UnsupportedOperationException后降级解析System.getProperty("java.version") - 对
"1.8.0_301"提取首位数字;对"8u301"或"11.0.18"做前缀数字截取 - 避免依赖小版本或构建号,只关注主版本(feature version)
示例代码片段
以下是一个轻量、无外部依赖的判断方法:
public static boolean isLtsVersion() {
int version;
try {
version = Runtime.version().feature();
} catch (Throwable ignored) {
String v = System.getProperty("java.version");
if (v.startsWith("1.")) {
version = Integer.parseInt(v.substring(2, 3)); // "1.8.x" → 8
} else {
version = Integer.parseInt(v.split("\.")[0]); // "11.0.18" → 11
}
}
return Set.of(8, 11, 17, 21).contains(version);
}
调用 isLtsVersion() 即可返回布尔结果。该方法覆盖Java 8至Java 21+,且易于维护。


















