Getting Java version at runtime
I need to work around a Java bug in JDK 1.5 which was fixed in 1.6. I'm using the following condition:
if (System.getProperty("java.version").startsWith("1.5.")) {
...
} else {
...
}
Will this work for other JVMs? Is there a better way to check this?
Solution 1:
java.version
is a system property that exists in every JVM. There are two possible formats for it:
- Java 8 or lower:
1.6.0_23
,1.7.0
,1.7.0_80
,1.8.0_211
- Java 9 or higher:
9.0.1
,11.0.4
,12
,12.0.1
Here is a trick to extract the major version: If it is a 1.x.y_z
version string, extract the character at index 2 of the string. If it is a x.y.z
version string, cut the string to its first dot character, if one exists.
private static int getVersion() {
String version = System.getProperty("java.version");
if(version.startsWith("1.")) {
version = version.substring(2, 3);
} else {
int dot = version.indexOf(".");
if(dot != -1) { version = version.substring(0, dot); }
} return Integer.parseInt(version);
}
Now you can check the version much more comfortably:
if(getVersion() < 6) {
// ...
}
Solution 2:
What about getting the version from the package meta infos:
String version = Runtime.class.getPackage().getImplementationVersion();
Prints out something like:
1.7.0_13
Solution 3:
Runtime.version()
Since Java 9, you can use Runtime.version()
, which returns a Runtime.Version
:
Runtime.Version version = Runtime.version();