Программно определить, какие JDK/JRE установлены на моем ящике

Есть ли стандартный способ сделать это? Я понимаю, что это зависит от платформы. Наш продукт сейчас поддерживается только в Windows - поэтому я предполагаю, что сейчас меня интересует. Единственное, что я могу придумать, - либо сканировать реестр, либо обходить файловую систему. Сканирование файловой системы, похоже, может занять очень много времени - и реестр может быть ненадежным. Должен ли я сделать то и другое? Любые другие предложения? Я попытался найти API, чтобы сделать это без везения.

Ответ 1

Сначала я начал бы искать переменную окружения JAVA_HOME (и, возможно, JDK_HOME, хотя это гораздо менее распространено), а затем определить, какая версия есть, и является ли это JDK или JRE.

После этого проверьте общие места. Узнайте каталог системных программных файлов (не просто предположите, что он C:\Program Files, хотя он составляет 99,5% времени), и найдите общие места установки под этим (например, Java).

Я бы не сделал исчерпывающий поиск.

Стоит спросить: вам действительно нужно найти JDK таким образом? Не можете ли вы просто спросить пользователя о том, какой JDK он или она хочет использовать, возможно, предлагая любые легкие, которые вы уже нашли?

Ответ 2

System.out.println(System.getProperty("java.version"));

Другие свойства здесь

Ответ 3

Вероятно, я бы выбрал комбинацию поиска установленных ключей реестра и обход местоположений по умолчанию для установки (что не должно занять слишком много времени).

Альтернативным подходом было бы расслоение крошечного Java-приложения, которое печатает различные детали, такие как работающая JVM.