Недавно я прочитал в книге о технологии на основе 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 -version
run выдаст сообщение об ошибке, в котором говорится, что команда не найдена. Это может означать только то, что он не на вашем пути, но все еще в вашей системе. Вы можете найти ее, выполнив поиск 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 в режиме клиента .