在运行时获取Java版本
我需要解决在1.6版本中修复的JDK 1.5中的Java错误。 我正在使用以下条件:
if (System.getProperty("java.version").startsWith("1.5.")) { ... } else { ... }
这会为其他JVMs工作吗? 有没有更好的方法来检查这个?
这些文章似乎build议检查1.5
或1.6
前缀应该工作,因为它遵循适当的版本命名约定。
Sun技术文章
- J2SE SDK / JRE版本string命名约定
- 版本1.5.0或5.0?
- “J2SE在一些只有开发者才能看到的版本号中保留了版本号1.5.0(或1.5),或者版本号被程序parsing的地方”
- “
java.version
系统属性”
- “
- “J2SE在一些只有开发者才能看到的版本号中保留了版本号1.5.0(或1.5),或者版本号被程序parsing的地方”
- 版本1.6.0由开发人员使用
- “Java SE在一些只有开发者才能看到的版本号或版本号被程序parsing的地方保留了版本号1.6.0(或1.6)。”
- “
java.version
系统属性”
- “
- “Java SE在一些只有开发者才能看到的版本号或版本号被程序parsing的地方保留了版本号1.6.0(或1.6)。”
java.version
是每个虚拟机中存在的标准属性。
这只是一个小小的窍门,可能会让你的生活变得更轻松:search第二个点,并在那里剪切string。 然后将其转换为double
。 现在,您可以更舒适地查看版本:
if (version >= 1.5) ...
你可以把它放到一个类的静态代码中,这样它只能运行一次:
public static double JAVA_VERSION = getVersion (); static double getVersion () { String version = System.getProperty("java.version"); int pos = version.indexOf('.'); pos = version.indexOf('.', pos+1); return Double.parseDouble (version.substring (0, pos)); }
那么从包元信息获取版本是什么:
String version = Runtime.class.getPackage().getImplementationVersion();
打印出如下所示的内容:
1.7.0_13
最简单的方法( java.specification.version ):
double version = Double.parseDouble(System.getProperty("java.specification.version")); if (version == 1.5) { // 1.5 specific code } else { // ... }
或者类似的东西( java.version ):
String[] javaVersionElements = System.getProperty("java.version").split("\\."); int major = Integer.parseInt(javaVersionElements[1]); if (major == 5) { // 1.5 specific code } else { // ... }
或者如果你想打破这一切( java.runtime.version ):
String discard, major, minor, update, build; String[] javaVersionElements = System.getProperty("java.runtime.version").split("\\.|_|-b"); discard = javaVersionElements[0]; major = javaVersionElements[1]; minor = javaVersionElements[2]; update = javaVersionElements[3]; build = javaVersionElements[4];
不工作,需要 – 评估双重:
String version = System.getProperty("java.version"); System.out.println("version:" + version); int pos = 0, count = 0; for (; pos < version.length() && count < 2; pos++) { if (version.charAt(pos) == '.') { count++; } } --pos; //EVALUATE double double dversion = Double.parseDouble(version.substring(0, pos)); System.out.println("dversion:" + dversion); return dversion; }
Apache Commons Lang的示例:
import org.apache.commons.lang.SystemUtils; Float version = SystemUtils.JAVA_VERSION_FLOAT; if (version < 1.4f) { // legacy } else if (SystemUtils.IS_JAVA_1_5) { // 1.5 specific code } else if (SystemUtils.isJavaVersionAtLeast(1.6f)) { // 1.6 compatible code } else { // dodgy clause to catch 1.4 :) }
从Java 9开始,您可以使用Runtime.version()
:
Runtime.Version version = Runtime.version();
- Runtime.Version JavaDoc 。
请注意,在Java 9及更高版本中,命名约定是不同的。 System.getProperty("java.version")
返回"9"
而不是"1.9"
。
不知道另一种检查方式,但这是: http : //java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#getProperties() “隐含”java.version “是一个标准的系统属性,所以我期望它能与其他JVM一起工作。
如果你可以依赖于apache utils,你可以使用org.apache.commons.lang3.SystemUtils。
System.out.println("Is Java version at least 1.8: " + SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_1_8));