Есть ли стандартный способ сделать это? Я понимаю, что это зависит от платформы. Наш продукт сейчас поддерживается только в Windows - поэтому я предполагаю, что сейчас меня интересует. Единственное, что я могу придумать, - либо сканировать реестр, либо обходить файловую систему. Сканирование файловой системы, похоже, может занять очень много времени - и реестр может быть ненадежным. Должен ли я сделать то и другое? Любые другие предложения? Я попытался найти API, чтобы сделать это без везения.
Программно определить, какие JDK/JRE установлены на моем ящике
Ответ 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.