[java] 런타임시 Java 버전 가져 오기

1.6에서 수정 된 JDK 1.5의 Java 버그를 해결해야합니다. 다음 조건을 사용하고 있습니다.

if (System.getProperty("java.version").startsWith("1.5.")) {
    ...
} else {
    ...
}

다른 JVM에서도 작동합니까? 이것을 확인하는 더 좋은 방법이 있습니까?



답변

이 기사는 확인 1.5하거나1.6 에서는 올바른 버전 이름 지정 규칙을 따르므로 접두어가 작동해야한다고 .

썬 기술 기사


답변

java.version모든 JVM에 존재 하는 시스템 특성 입니다. 두 가지 가능한 형식이 있습니다.

  • 자바 8 이하 : 1.6.0_23, 1.7.0, 1.7.0_80,1.8.0_211
  • 자바 9 이상 : 9.0.1, 11.0.4, 12,12.0.1

다음은 주 버전을 추출하는 요령입니다. 1.x.y_z버전 문자열 인 경우 문자열의 인덱스 2에서 문자를 추출하십시오. 그것은 경우 x.y.z버전 문자열이 존재하는 경우, 최초의 도트 문자로 문자열을 잘라.

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);
}

이제 버전을 훨씬 더 편안하게 확인할 수 있습니다.

if(getVersion() < 6) {
    // ...
}


답변

패키지 메타 정보에서 버전을 얻는 방법은 무엇입니까?

String version = Runtime.class.getPackage().getImplementationVersion();

다음과 같은 것을 인쇄합니다.

1.7.0_13


답변

Runtime.version()

자바 9 때문에, 당신은 사용할 수 있습니다 Runtime.version()반환, Runtime.Version:

Runtime.Version version = Runtime.version();


답변

가장 간단한 방법 ( 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];


답변

Java 9 이상에서는 명명 규칙이 다릅니다. 보다는을 System.getProperty("java.version")반환합니다 ."9""1.9"


답변

작동하지 않으면 --pos이중으로 평가 해야 합니다.

    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;
}