Есть ли стандартный способ сделать это? Я понимаю, что это зависит от платформы. Наш продукт сейчас поддерживается только в Windows - поэтому я полагаю, что сейчас меня интересует. Единственное, что я могу придумать, - либо сканировать реестр, либо обходить файловую систему. Сканирование файловой системы, похоже, может занять очень много времени - и реестр может быть ненадежным. Должен ли я сделать то и другое? Любые другие предложения? Я попытался найти API, чтобы сделать это без везения.Программно определить, какие JDK/JRE установлены на моем ящике
ответ
Сначала я начал искать переменную окружения JAVA_HOME (и, возможно, JDK_HOME, хотя это и гораздо менее распространено), а затем определить, какая версия есть, и является ли это JDK или JRE.
После этого проверьте наличие обычных мест. Узнайте каталог программных файлов системы (не просто предположите, что это C: \ Program Files, даже если он составляет 99,5% времени), и найдите общие места установки под этим (например, Java).
Я бы не стал исчерпывающим поиском.
Стоит спросить: вам действительно нужно найти JDKs таким образом? Разве вы не можете просто спросить у пользователя, какой JDK он или она хочет использовать, возможно, предлагая любые легкие, которые вы уже нашли?
Я бы выбрал комбинацию поиска установленных ключей реестра и обход по умолчанию мест для установки (что не должно занять слишком много времени).
Альтернативным подходом было бы расслоение крошечного приложения Java, которое печатает различные детали, такие как запущенная JVM.
System.out.println(System.getProperty("java.version"));
Другие свойства here
Это говорит только о версии JRE, выполняющей код, а не о том, что установлены JDK/JRE – Jonik
Извините, я неправильно понял вопрос. Вы можете использовать реестр, и если ничего не найдено, спросите пользователя. Ключом является HKEY_LOCAL_MASHINE/SOFTWARE/JavaSoft/Java Development Kit –
Клетуса вы можете защитить, почему вы не сделали бы перебором? Интуитивно я соглашаюсь здесь, но я ищу сильные причины. –
Исчерпывающий поиск потребует поиска всех жестких дисков для файлов java.exe или javac.exe (при условии, что Windows), что может занять много времени. –
Предлагаем вам ограничить поиск в C: \ Program Files \ и переменной среды% PATH% в дополнение к двум перечисленным выше переменным. –