実行時の Java バージョン取得方法


Java8 以前

システムプロパティから java.version のキーで取得できます。

String version = System.getProperty("java.version");


Java9からは表記が変わるので注意が必要です。

  • Java8 まで:1.6.0_23、1.7.0、1.7.0_80、1.8.0_211
  • Java9 から:9.0.1、11.0.4、12、12.0.1


ちなみに、VM のバージョンなどは以下のように取得できます。

String java_vm_name    = System.getProperty("java.vm.name");
String java_vm_version = System.getProperty("java.vm.version");
String java_vm_info    = System.getProperty("java.vm.info");


Java9 で入った Runtime.Version

Java9 からは Runtime.Version クラスが追加されているため以下のように取得できます。

Runtime.Version v = Runtime.version();
System.out.println("version:" + v.toString());

例えば、手元の Java15 では以下のように表示されます。

  • システムプロパティ(java.version) : version:15.0.1
  • Runtime.Version : version:15.0.1+9


Runtime.Version からは以下のようにそれぞれの値を取得することもできます。

System.out.println("feature:" + v.feature()); // major() on Java9
System.out.println("interim:" + v.interim()); // interim() on Java9
System.out.println("update:" + v.update()); // security() on Java9
System.out.println("patch:" + v.patch());

compareTo​()parse​()equals() などのメソッドも付いています。


VersionProps

Runtime.version() で取得できる Runtime.Version は、VersionProps の値から設定されます。

このVersionProps では、以下のようにシステムプロパティの値の初期化も行っています。

class VersionProps {

    // ...

    public static void init(Map<String, String> props) {
        props.put("java.version", java_version);
        props.put("java.version.date", java_version_date);
        props.put("java.runtime.version", java_runtime_version);
        props.put("java.runtime.name", java_runtime_name);
        if (!VENDOR_VERSION.isEmpty())
            props.put("java.vendor.version", VENDOR_VERSION);

        props.put("java.class.version", CLASSFILE_MAJOR_MINOR);

        props.put("java.specification.version", VERSION_SPECIFICATION);
        props.put("java.specification.name", "Java Platform API Specification");
        props.put("java.specification.vendor", "Oracle Corporation");

        props.put("java.vendor", VENDOR);
        props.put("java.vendor.url", VENDOR_URL);
        props.put("java.vendor.url.bug", VENDOR_URL_BUG);
    }
}