Проверка версии Java в рантайме: надежный метод
Быстрый ответ
Для определения версии Java, воспользуйтесь System.getProperty("java.version")
:
System.out.println("Версия Java: " + System.getProperty("java.version"));
Для условных сверок, основанных на версии Java, извлеките старшую версию следующим образом:
String versionString = System.getProperty("java.version");
int majorVersion = Integer.parseInt(versionString.split("\\.")[0]);
if (majorVersion == 1) { // Ещё не прошли те золотые времена Java!
majorVersion = Integer.parseInt(versionString.split("\\.")[1]);
}
// "majorVersion" готов к использованию в условных выражениях
Начиная с Java 9 и выше рекомендуется использовать метод Runtime.version()
:
Runtime.Version runtimeVersion = Runtime.version();
System.out.println("Старшая версия Java: " + runtimeVersion.major()); // выводит старшую версию текущей Java
Определение версии в разных средах выполнения JVM
Для обеспечения обратной совместимости с различными JVM определяйте версию реализации с помощью Runtime.class.getPackage().getImplementationVersion()
.
Разбор компонентов версии Java
Для детального анализа строки версии разбейте её на составляющие или преобразуйте в число с плавающей точкой:
String[] versionElements = System.getProperty("java.version").split("\\D+");
int major = Integer.parseInt(versionElements[0]);
int minor = Integer.parseInt(versionElements[1]);
int patch = Integer.parseInt(versionElements[2]);
// Или преобразуйте в число с плавающей точкой:
double versionNumber = Double.parseDouble(major + "." + minor);
Работа с ошибками, связанными с версией Java
Для избежания ошибок JDK 1.5, прямо сравните версию Java:
if (System.getProperty("java.version").startsWith("1.5")) {
// Мы вспоминаем ошики Java 1.5 или ищем обходные пути
}
Визуализация
Вот простой способ представления идентификатора версии Java:
Runtime (🏃♂️ Java): "Покажите, пожалуйста, ваш ID?"
System.getProperty("java.version"): "🆔 1.8.0_131" // Не путайте, это не "Java 20". Проверьте актуальность!
System.getProperty("java.runtime.version"): "🆔 1.8.0_131-b11" // "Полная версия" с номером обновления и сборки
Подобные свойства можно воспринимать как удостоверения личности с разной степенью детализации.
Использование альтернативных свойств: 'java.specification.version' и 'java.runtime.version'
Для понимания системы именования Java используйте java.specification.version
для простых проверок и java.runtime.version
для более точной информации. Технические статьи Sun дают глубокое понимание об этих "перламутрах".
Практическое использование: объединение всех этапов
Произведение сравнений, зависящих от версии
Если логика вашего приложения зависит от определенных версий Java, используйте сравнения:
// Используем java.specification.version для серьезной беседы о старших версиях
String specVersion = System.getProperty("java.specification.version");
if (specVersion.equals("1.8")) {
// Вспоминаем о Java 8, когда Плутон еще был планетой?
}
Обеспечение совместимости между разными реализациями JVM
Чтобы ваше приложение работало верно с разными реализациями JVM, воспользуйтесь классом Runtime
:
String implementationVersion = Runtime.class.getPackage().getImplementationVersion();
System.out.println("Версия реализации JVM: " + implementationVersion); // выводит версию вашей локальной JVM
Учёт особенностей, связанных с версией
Помните, что разные версии Java обладают своими спецификациями. Адаптеры и проверки помогут предотвратить ошибки и непредвиденное поведение в исключительных ситуациях, связанных с определенными версиями Java.
Полезные материалы
- Oracle Docs – Системные свойства — Подробное руководство по использованию системных свойств Java во время выполнения.
- Stack Overflow – Как определить версию Java при помощи системных свойств — Обсуждение на Stack Overflow на тему, почему этот код лучше, чем
java –version
. - Apache Commons Lang – SystemUtils — Библиотека для эффективного использования системных свойств.
- Oracle Docs – Класс Runtime — Детальное изучение класса Runtime в документации Java SE 7.
- DZone Refcard – Основы Java — Путеводитель по базовым элементам Java для разработчиков.