Перейти к основному содержимому

Получение версии Java во время выполнения

· 2 мин. чтения

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.