2009-07-27 1 views
10

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

ответ

3

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

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

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

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

+0

Клетуса вы можете защитить, почему вы не сделали бы перебором? Интуитивно я соглашаюсь здесь, но я ищу сильные причины. –

+0

Исчерпывающий поиск потребует поиска всех жестких дисков для файлов java.exe или javac.exe (при условии, что Windows), что может занять много времени. –

+0

Предлагаем вам ограничить поиск в C: \ Program Files \ и переменной среды% PATH% в дополнение к двум перечисленным выше переменным. –

1

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

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

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

Другие свойства here

+0

Это говорит только о версии JRE, выполняющей код, а не о том, что установлены JDK/JRE – Jonik

+0

Извините, я неправильно понял вопрос. Вы можете использовать реестр, и если ничего не найдено, спросите пользователя. Ключом является HKEY_LOCAL_MASHINE/SOFTWARE/JavaSoft/Java Development Kit –