Статьи

Определение установки JDK

Недавно я прочитал в книге о технологии на основе Java, что можно определить, установлен ли JDK, запустив java -versionи найдя строки «Клиент» или «Сервер» в выходных данных команды версии. Авторы этой книги утверждают, что наличие «серверной виртуальной машины» означает, что JDK установлен, а наличие «клиентской виртуальной машины» означает, что JDK не установлен (вероятно, подразумевается, что JRE присутствует только потому, что что-то возвращается). К сожалению, этого недостаточно для определения наличия JDK. В этом посте я расскажу, как можно определить, что JDK установлен и находится в пути.

Прежде чем обсуждать подходы к определению, установлен ли JDK, я сначала хочу показать, почему недостаточно запустить java -versionи найти «Сервер» или «Клиент», чтобы отличить присутствие от отсутствия JDK. На следующем снимке экрана (с добавленными желтыми кружочками) показано, как он работает java -version, работает java -client -versionи работает java -server -version. Важным выводом из этого снимка экрана является то, что именно параметр сервер-клиент работающей JVM действительно определяет, присутствует ли строка «Сервер» или «Клиент» в возвращенной информации о версии Java.

Этот снимок экрана показывает, что виртуальной машиной по умолчанию является «Клиент» для этого компьютера. Это неудивительно, учитывая, что на странице « Обнаружение компьютеров серверного класса» указано, что «виртуальная машина по умолчанию» для операционной системы «Microsoft Windows» в аппаратной архитектуре «i586» — это « виртуальная машина клиента по умолчанию ». Для большинства других «поддерживаемых Sun» комбинаций архитектуры / ОС по умолчанию используется значение «Сервер». В 64-разрядных архитектурах этот -clientпараметр игнорируется, и всегда используется серверная виртуальная машина, хотя в документации по средствам запуска Java указано, что это последнее наблюдение «может быть изменено в будущем выпуске».

Запуск java -versionдействительно помогает определить, находится ли средство запуска приложения Java на пути пользователя. Если его нет в пути, можно ожидать сообщение об ошибке, указывающее, что «java» — это команда, которая не найдена. Можно определить, находится ли какая-либо версия JDK на пути, используя javac -version. Поскольку компилятор Java поставляется только с JDK, а не с JRE, это простой тест, чтобы убедиться, что какая-то версия JDK находится в вашей системе и на вашем пути. -helpФлаг также может быть передан JAVAC , чтобы определить присутствие JDK, но -versionимеет дополнительное преимущество , сообщающего оператору , какая версия JDK находится в системе , и на пути. Это показано на следующем снимке экрана.

Если он javacеще не на вашем пути, программа javac -versionrun выдаст сообщение об ошибке, в котором говорится, что команда не найдена. Это может означать только то, что он не на вашем пути, но все еще в вашей системе. Вы можете найти ее, выполнив поиск javacкоманды с помощью инструмента поиска операционной системы (например, в Linux с помощью whereis или find или в Windows с его инструментами поиска по каталогу / файлу или с помощью инструмента «Удаление / изменение программ» панели управления). Если javac -versionнайдено и возвращает версию, вы можете определить, что на Linux с WhereIs JAVAC и на Windows , с помощью команды Grokster «s рекомендации :

    for %i in (javac.exe) do @echo.   %~$PATH:i  

На следующем снимке экрана показан подход панели управления Windows для определения того, какие версии JRE и JDK установлены на компьютере Windows.

Показанное «Обновление 11 для Java 7» является Java 7 JRE и не включает JDK. «Java SE Development Kit 7 Update 6» — это JDK, о котором сообщает часть «Development Kit».

Для машин Windows, Java (будь то JDK или JRE) может быть установлен в Program Files / Java, и можно изучить этот каталог, чтобы увидеть, какие версии Java установлены. Это показано на следующем снимке экрана.

На приведенном выше снимке экрана три папки с именами «jdk» являются установками JDK, а папка с именем «jre» — только JRE (без JDK).

Вывод

Я могу понять, почему авторы книги, которую я читал, хотели использовать присутствие «Server» в информации о версии VM, чтобы указать JDK, и «Client» в версии VM, чтобы указать JRE; это было бы, если бы это работало, намного более легким способом для читателя, относительно новичка в Java, чтобы сделать такое определение. К сожалению, это не так просто, как доказано в потоке StackOverflow. Как узнать, где JDK установлен на моем компьютере с Windows? и как узнать, установлен ли Sun Java Development Kit? В обоих этих ресурсах опубликовано немало интересных идей.

Я даже не смотрел на этот пост в сложности на Windows , в нескольких развертываний JRE , поскольку мое внимание на этом посту был на поиске установленных JDKs. Кстати, больше информации о разнице между клиентской виртуальной машиной и серверной виртуальной машиной можно найти в разделе Реальные различия между «java -server» и «java -client»? , Параметры виртуальной машины Java HotSpot и сервер JVM в режиме клиента .