Содержание статьи

Переменная среды JAVA_HOME указывает системе и прикладным инструментам точный путь к установленному Java Development Kit. Без неё сборщики проектов, серверы приложений и средства автоматизации часто не могут определить, какую версию Java использовать, даже если сама Java корректно установлена и доступна через командную строку.
На практике значение JAVA_HOME требуется для работы Maven, Gradle, Tomcat, Jenkins и множества IDE. При отсутствии или неверном пути возникают типичные ошибки: запуск с неподдерживаемой версией JRE, сбои при компиляции или отказ сервисов стартовать. Поэтому настройка переменной должна опираться не на догадки, а на фактическое расположение JDK в файловой системе.
В статье рассматриваются конкретные шаги определения пути к Java, способы задания JAVA_HOME для текущего пользователя или всей системы и методы быстрой проверки, позволяющие убедиться, что приложения действительно используют нужную версию JDK.
Что такое JAVA_HOME и где она используется в системе
Переменная используется программами для прямого доступа к инструментам Java: компилятору javac, утилитам javadoc, jarsigner и внутренним библиотекам. В отличие от переменной PATH, которая влияет только на поиск команд, JAVA_HOME служит источником информации о конкретной установленной версии JDK.
Большинство серверных и сборочных инструментов сначала проверяют наличие JAVA_HOME, и только при её отсутствии пытаются определить Java альтернативными способами. Если в системе установлено несколько версий JDK, именно значение этой переменной определяет, какая из них будет использована по умолчанию.
| Компонент | Как используется JAVA_HOME |
|---|---|
| Maven | Определяет версию JDK для компиляции и запуска плагинов |
| Gradle | Выбирает JVM для сборки и выполнения задач |
| Apache Tomcat | Использует путь к JDK при запуске сервера |
| Jenkins | Запускает агенты и сборки с указанной версией Java |
| IDE | Настраивает внутренние инструменты компиляции и отладки |
Отсутствие или некорректное значение JAVA_HOME приводит к ошибкам запуска, использованию неподходящей версии Java или невозможности сборки проектов. Поэтому при работе с Java-инфраструктурой настройка этой переменной рассматривается как обязательный базовый шаг.
Как узнать путь к установленной Java на Windows

Для определения пути к установленной Java на Windows следует опираться на фактическое расположение JDK, а не на записи в переменной PATH. Самый надёжный способ – использовать командную строку. После запуска cmd выполните команду where java, затем откройте каталог на уровень выше папки bin, так как значение JAVA_HOME должно указывать именно на корень JDK.
Если Java была установлена стандартным инсталлятором, JDK чаще всего располагается в каталоге C:\Program Files\Java. Внутри находятся папки с именами версий, например jdk-17 или jdk-21. Выбор директории следует делать в пользу полной версии JDK, а не jre, даже если в системе присутствуют обе.
Дополнительно путь можно проверить через реестр Windows. В редакторе реестра по ветке HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JDK хранится параметр JavaHome, содержащий точное значение пути. Этот метод полезен, когда в системе установлено несколько версий Java и требуется определить активную.
После определения корректного каталога JDK рекомендуется сразу сохранить полный путь без кавычек и пробелов в конце, так как именно это значение будет использоваться при создании переменной среды JAVA_HOME.
Добавление JAVA_HOME через настройки системы Windows

В зависимости от задачи переменную можно создать на уровне пользователя или всей системы. Для инструментов сборки и серверных приложений предпочтителен системный уровень, так как он действует для всех учётных записей.
- В блоке «Системные переменные» нажмите кнопку «Создать».
- В поле «Имя переменной» укажите JAVA_HOME.
- В поле «Значение переменной» вставьте полный путь к каталогу JDK, например C:\Program Files\Java\jdk-21.
- Подтвердите ввод нажатием «ОК» во всех открытых окнах.
После создания JAVA_HOME рекомендуется добавить ссылку на бинарные файлы Java в переменную Path, если этого ещё не сделано. Это позволяет запускать команды Java из любой директории.
- Откройте системную переменную Path для редактирования.
- Добавьте новый элемент со значением %JAVA_HOME%\bin.
- Сохраните изменения без удаления существующих записей.
Для применения изменений необходимо открыть новое окно командной строки или перезапустить приложения, которые будут использовать Java. Перезагрузка системы требуется только в случае, если переменные используются фоновыми сервисами.
Проверка корректности JAVA_HOME в командной строке Windows

Следующий шаг – проверка соответствия JAVA_HOME фактически используемой версии Java. Выполните команду %JAVA_HOME%\bin\java -version. Если путь задан корректно, будет выведена информация о версии JVM, находящейся именно в указанном каталоге JDK.
Дополнительно стоит проверить, не используется ли другая версия Java через переменную Path. Команда where java показывает все найденные исполняемые файлы Java в системе. Приоритет должен иметь путь %JAVA_HOME%\bin\java.exe; если выше расположен другой каталог, это может привести к запуску неподходящей версии.
Распространённая ошибка – указание пути к папке bin или jre вместо корня JDK. В таком случае команды, обращающиеся к JAVA_HOME, не находят необходимые утилиты. Корректное значение всегда указывает на каталог уровня jdk-XX.
Если изменения не отражаются в командной строке, закройте все открытые окна cmd и откройте новое. Переменные среды не обновляются в уже запущенных процессах, поэтому повторная проверка должна выполняться только в новой сессии.
Определение пути к Java в macOS через терминал

В macOS основной инструмент для определения установленной Java – утилита /usr/libexec/java_home. Откройте терминал и выполните команду /usr/libexec/java_home. В ответ будет выведен абсолютный путь к текущей версии JDK, например /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home, который и используется для значения JAVA_HOME.
Если в системе установлено несколько версий JDK, команда /usr/libexec/java_home -V отображает их полный список с указанием версий и путей. Это позволяет явно выбрать нужную реализацию, особенно при работе с проектами, требующими конкретной версии Java.
Дополнительно можно проверить фактическое расположение исполняемого файла командой which java. В macOS она обычно указывает на /usr/bin/java, являющийся системным прокси, поэтому этот путь не подходит для JAVA_HOME и не должен использоваться при настройке переменной среды.
Полученный путь следует сохранить без изменений, так как вложенная структура каталога Contents/Home является обязательной частью корректного значения JAVA_HOME в macOS.
Настройка переменной JAVA_HOME в macOS через shell-профиль
В macOS переменная JAVA_HOME настраивается через профиль используемой командной оболочки. Актуальную оболочку можно определить командой echo $SHELL. В современных версиях системы по умолчанию используется zsh, для которого применяется файл ~/.zshrc. Для bash используются файлы ~/.bash_profile или ~/.bashrc.
Откройте соответствующий файл профиля в текстовом редакторе и добавьте строку экспорта переменной. В качестве значения следует использовать путь, полученный через /usr/libexec/java_home. Пример записи: export JAVA_HOME=$(/usr/libexec/java_home). Такой формат позволяет автоматически подставлять актуальную версию JDK.
Если требуется зафиксировать конкретную версию Java, допускается указание параметра версии, например export JAVA_HOME=$(/usr/libexec/java_home -v 17). Это полезно при работе с проектами, зависящими от строго определённой версии JDK.
После сохранения файла необходимо применить изменения. Для этого либо откройте новое окно терминала, либо выполните загрузку профиля вручную с помощью source ~/.zshrc или соответствующего файла оболочки.
Проверка и устранение ошибок JAVA_HOME в Linux
Для подтверждения соответствия версии выполните $JAVA_HOME/bin/java -version. Если команда не выполняется или файл не найден, значит путь указан неверно либо переменная ссылается на JRE вместо JDK. Проверить активную Java, доступную в системе, можно через which java и readlink -f $(which java).
Распространённая причина ошибок – объявление JAVA_HOME в файле, который не загружается используемой оболочкой. Для bash это обычно ~/.bashrc или ~/.bash_profile, для zsh – ~/.zshrc. Для системного уровня переменную задают в /etc/environment или в отдельном файле внутри /etc/profile.d.
Если в системе установлено несколько реализаций Java, стоит проверить механизм альтернатив. Команда update-alternatives —config java позволяет выбрать активную версию, однако она не изменяет JAVA_HOME автоматически. Значение переменной необходимо синхронизировать вручную с выбранным JDK.
После внесения изменений загрузите профиль командой source или откройте новую сессию терминала. При работе с сервисами и демонами требуется перезапуск соответствующих процессов, так как они не подхватывают обновлённые переменные среды динамически.
Вопрос-ответ:
Можно ли указывать путь к JRE вместо JDK в переменной JAVA_HOME?
Нет, для большинства инструментов требуется именно каталог JDK. JRE содержит только среду выполнения и не включает компилятор javac и служебные утилиты. Если указать путь к JRE, сборщики проектов и серверы приложений часто завершаются с ошибками или используют другую установленную версию Java.
Почему после добавления JAVA_HOME команда echo не показывает значение?
Переменные среды не обновляются в уже запущенных сессиях. Если значение не отображается, значит командная строка или терминал были открыты до внесения изменений, либо переменная задана в файле профиля другой оболочки. Откройте новое окно или загрузите профиль вручную.
Что делать, если в системе установлено несколько версий Java?
Нужно явно выбрать каталог нужного JDK и задать его в JAVA_HOME. В Windows это делается через системные переменные, в macOS — через /usr/libexec/java_home с указанием версии, в Linux — вручную с учётом выбранной альтернативы java. Значение JAVA_HOME не переключается автоматически при смене версии Java.
Нужно ли добавлять %JAVA_HOME%\\bin или $JAVA_HOME/bin в PATH?
Да, это позволяет запускать команды java и javac без указания полного пути. При этом именно JAVA_HOME остаётся источником информации о корневом каталоге JDK, а PATH используется только для поиска исполняемых файлов.
Почему сервер или сборка используют другую версию Java, хотя JAVA_HOME задан?
Некоторые приложения запускаются как сервисы и читают переменные среды только при старте. Если JAVA_HOME был изменён позже, процесс продолжает работать со старым значением. В таких случаях требуется перезапуск сервиса или всей системы, а также проверка собственных настроек приложения.
Почему значение JAVA_HOME задано правильно, но Maven сообщает об отсутствии Java?
Чаще всего Maven запускается в среде, которая не видит переменную JAVA_HOME. В Windows это происходит, если Maven стартует как служба или из старого окна командной строки. В Linux и macOS причина обычно связана с тем, что JAVA_HOME объявлена в пользовательском профиле, а сборка запускается через другой shell или системный сервис. Проверьте вывод команды mvn -version: в нём указан путь к Java, который фактически используется. Если он отличается от ожидаемого, переменную нужно задать на том уровне, где запускается Maven.
