in junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/JRE.java [121:169]
private static JRE determineCurrentVersion() {
String javaVersion = System.getProperty("java.version");
boolean javaVersionIsBlank = StringUtils.isBlank(javaVersion);
if (javaVersionIsBlank) {
logger.debug(
() -> "JVM system property 'java.version' is undefined. It is therefore not possible to detect Java 8.");
}
if (!javaVersionIsBlank && javaVersion.startsWith("1.8")) {
return JAVA_8;
}
try {
// java.lang.Runtime.version() is a static method available on Java 9+
// that returns an instance of java.lang.Runtime.Version which has the
// following method: public int major()
Method versionMethod = Runtime.class.getMethod("version");
Object version = ReflectionUtils.invokeMethod(versionMethod, null);
Method majorMethod = version.getClass().getMethod("major");
int major = (int) ReflectionUtils.invokeMethod(majorMethod, version);
switch (major) {
case 9:
return JAVA_9;
case 10:
return JAVA_10;
case 11:
return JAVA_11;
case 12:
return JAVA_12;
case 13:
return JAVA_13;
case 14:
return JAVA_14;
case 15:
return JAVA_15;
case 16:
return JAVA_16;
default:
return OTHER;
}
}
catch (Exception ex) {
logger.debug(ex, () -> "Failed to determine the current JRE version via java.lang.Runtime.Version.");
}
// null signals that the current JRE version is "unknown"
return null;
}