런타임에 Java 버전 가져오기
1.6에서 수정된 JDK 1.5의 Java 버그에 대한 대처가 필요합니다.다음 조건을 사용하고 있습니다.
if (System.getProperty("java.version").startsWith("1.5.")) {
...
} else {
...
}
다른 JVM에서도 작동합니까? 더 나은 확인 방법이 있습니까?
java.version
는 모든 JVM에 존재하는 시스템 속성입니다.다음 두 가지 형식을 사용할 수 있습니다.
- Java 8 이하:
1.6.0_23
,1.7.0
,1.7.0_80
,1.8.0_211
- Java 9 이상:
9.0.1
,11.0.4
,12
,12.0.1
메이저 버전을 추출하는 요령은 다음과 같습니다.의 경우1.x.y_z
version string 문자열의 인덱스 2에 있는 문자를 추출합니다.의 경우x.y.z
version string 첫 번째 도트 문자가 있는 경우 해당 도트 문자로 잘라냅니다.
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()
Java 9 이후를 사용하면를 반환할 수 있습니다.
Runtime.Version version = Runtime.version();
이 기사들은 다음 사항을 확인하는 것을 암시하는 것 같다.1.5
또는1.6
적절한 버전의 명명 규칙을 따르기 때문에 프레픽스가 기능해야 합니다.
Sun 테크니컬 기사
- J2SE SDK/JRE 버전 문자열 명명 규칙
- 버전 1.5.0 또는 5.0?
- "또한 J2SE는 버전 번호 1.5.0(또는 1.5)을 개발자만 볼 수 있거나 버전 번호가 프로그램에 의해 해석되는 장소에 보관하고 있습니다."
- "
java.version
시스템 속성"
- "
- "또한 J2SE는 버전 번호 1.5.0(또는 1.5)을 개발자만 볼 수 있거나 버전 번호가 프로그램에 의해 해석되는 장소에 보관하고 있습니다."
- 개발자가 사용하는 버전 1.6.0
- "Java SE는 버전 번호 1.6.0(또는 1.6)을 개발자만 볼 수 있거나 버전 번호가 프로그램에 의해 구문 분석되는 곳에 보관합니다."
- "
java.version
시스템 속성"
- "
- "Java SE는 버전 번호 1.6.0(또는 1.6)을 개발자만 볼 수 있거나 버전 번호가 프로그램에 의해 구문 분석되는 곳에 보관합니다."
가장 간단한 방법(java.specification).버전):
double version = Double.parseDouble(System.getProperty("java.specification.version"));
if (version == 1.5) {
// 1.5 specific code
} else {
// ...
}
또는 (version.version):
String[] javaVersionElements = System.getProperty("java.version").split("\\.");
int major = Integer.parseInt(javaVersionElements[1]);
if (major == 5) {
// 1.5 specific code
} else {
// ...
}
또는 모든 것을 해체하고 싶은 경우(198.199).버전):
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"
.
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 :)
}
기능하지 않음, 필요--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;
}
apache utils에 의존할 수 있는 경우 org.apache.commons.lang3을 사용할 수 있습니다.시스템 유틸리티
System.out.println("Is Java version at least 1.8: " + SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_1_8));
JOSM에서의 실장은 다음과 같습니다.
/**
* Returns the Java version as an int value.
* @return the Java version as an int value (8, 9, etc.)
* @since 12130
*/
public static int getJavaVersion() {
String version = System.getProperty("java.version");
if (version.startsWith("1.")) {
version = version.substring(2);
}
// Allow these formats:
// 1.8.0_72-ea
// 9-ea
// 9
// 9.0.1
int dotPos = version.indexOf('.');
int dashPos = version.indexOf('-');
return Integer.parseInt(version.substring(0,
dotPos > -1 ? dotPos : dashPos > -1 ? dashPos : 1));
}
다른 방법은 모르겠지만 http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#getProperties()은 표준 시스템 속성이기 때문에 다른 JVM과 함께 사용할 수 있을 것으로 예상됩니다.
된 @입니다.스칼라 @mvanle @mvanle @mvanle 。 scala> val Array(javaVerPrefix, javaVerMajor, javaVerMinor, _, _) = System.getProperty("java.runtime.version").split("\\.|_|-b") javaVerPrefix: String = 1 javaVerMajor: String = 8 javaVerMinor: String = 0
코틀린:
/**
* Returns the major JVM version, e.g. 6 for Java 1.6, 8 for Java 8, 11 for Java 11 etc.
*/
public val jvmVersion: Int get() = System.getProperty("java.version").parseJvmVersion()
/**
* Returns the major JVM version, 1 for 1.1, 2 for 1.2, 3 for 1.3, 4 for 1.4, 5
* for 1.5 etc.
*/
fun String.parseJvmVersion(): Int {
val version: String = removePrefix("1.").takeWhile { it.isDigit() }
return version.toInt()
}
언급URL : https://stackoverflow.com/questions/2591083/getting-java-version-at-runtime
'sourcecode' 카테고리의 다른 글
vuex 모듈 사용 시 돌연변이를 테스트하는 방법 (0) | 2022.08.14 |
---|---|
개체를 문자열로 직렬화하는 방법 (0) | 2022.08.14 |
VueJS String 보간으로 TS 개체의 개인 속성에 액세스할 수 있습니다. (0) | 2022.08.14 |
값 0 대신 NULL을 사용할 수 있습니까? (0) | 2022.08.14 |
1개의 코어 전체를 단일 프로세스 전용 (0) | 2022.08.14 |