1. Обзор
Иногда при программировании на Java может быть полезно программно найти версию Java, которую мы используем. В этом руководстве мы рассмотрим несколько способов получить версию Java.
2. Соглашение об именах версий Java
Вплоть до Java 9 версия Java не следовала Semantic Versioning . Формат был 1.X.Y_Z
. X
и Y
обозначают основную и дополнительную версии соответственно. Z
используется для обозначения выпуска обновления и отделяется символом подчеркивания «_». Например, 1.8.0_181
. Для Java 9 и более поздних версий версия Java следует семантическому управлению версиями. Семантическое управление версиями использует формат XYZ .
Это относится к основным, второстепенным и патчам. Например, 11.0.7
.
3. Получение версии Java
3.1. Использование System.getProperty
Системное свойство — это пара ключ-значение, предоставляемая средой выполнения Java. java.version — это
системное свойство, предоставляющее версию Java. Определим метод получения версии:
public void givenJava_whenUsingSystemProp_thenGetVersion() {
int expectedVersion = 8;
String[] versionElements = System.getProperty("java.version").split("\\.");
int discard = Integer.parseInt(versionElements[0]);
int version;
if (discard == 1) {
version = Integer.parseInt(versionElements[1]);
} else {
version = discard;
}
Assertions.assertThat(version).isEqualTo(expectedVersion);
}
Для поддержки обоих форматов версии Java мы должны проверить первое число до точки.
3.2. Использование Apache Commons Lang 3
Второй способ получения версии Java — через библиотеку Apache Commons Lang 3 . Сначала нам нужно добавить зависимость Maven commons-lang3
в наш файл pom.xml
:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
Мы будем использовать класс SystemUtils
для получения информации о платформе Java. Давайте определим метод для этой цели:
public void givenJava_whenUsingCommonsLang_thenGetVersion() {
int expectedVersion = 8;
String[] versionElements = SystemUtils.JAVA_SPECIFICATION_VERSION.split("\\.");
int discard = Integer.parseInt(versionElements[0]);
int version;
if (discard == 1) {
version = Integer.parseInt(versionElements[1]);
} else {
version = discard;
}
Assertions.assertThat(version).isEqualTo(expectedVersion);
}
Мы используем JAVA_SPECIFICATION_VERSION
, предназначенную для отражения доступных значений из системного свойства java.specification.version
.
3.3. Использование Runtime.version()
В Java 9 и выше мы можем использовать Runtime.version()
для получения информации о версии. Давайте определим метод для этой цели:
public void givenJava_whenUsingRuntime_thenGetVersion(){
String expectedVersion = "15";
Runtime.Version runtimeVersion = Runtime.version();
String version = String.valueOf(runtimeVersion.version().get(0));
Assertions.assertThat(version).isEqualTo(expectedVersion);
}
4. Вывод
В этой статье мы опишем несколько способов получения версии Java. Как обычно, все примеры кода, используемые в этом руководстве, доступны на GitHub.