Установка Java и jvm.dll: диагностика JDK, PATH и среды IDE
Автор: Казачкин Даниил Михайлович · Обновлено
Ошибка jvm.dll появляется на этапе загрузки среды выполнения, ещё до обычной логики Java-программы. Прежде чем менять проект, нужно установить, какой launcher запущен, какой…
Ошибка jvm.dll появляется на этапе загрузки среды выполнения, ещё до обычной логики Java-программы. Прежде чем менять проект, нужно установить, какой launcher запущен, какой runtime он ищет и совпадает ли этот путь с выбранным JDK.
Выберите JDK под свою систему
Для трека используйте полный JDK 25 подходящей архитектуры с официальной страницы поставщика. Установщик или целиком распакованный архив должны сохранять структуру каталогов. Не переносите один java.exe отдельно от остальной поставки: launcher зависит от соседних компонентов. Инструкция Oracle для Windows.
Сначала убедитесь, что вам разрешено устанавливать программы на эту машину. На рабочем компьютере корпоративные ограничения могут определять допустимого поставщика и каталог. В Windows проводник должен показывать расширения: файл EnvironmentCheck.java.txt не является исходником с ожидаемым именем.
Проверьте обе команды и оба пути
В PowerShell следующие команды только показывают текущую конфигурацию:
where.exe java
where.exe javac
Get-Command java -All
$env:JAVA_HOME
java -version
javac -versionПервая найденная в PATH команда может относиться к старой установке. JAVA_HOME обычно указывает на корень JDK, а не на bin и не на файл java.exe. Эта переменная не заставляет произвольный launcher использовать именно её: сверяйте правила конкретной программы. Oracle отдельно описывает случай, когда старый javapath маскирует новый JDK. Диагностика путей Windows.
Для пробной настройки только текущего окна PowerShell укажите свой фактический каталог вместо примера:
$env:JAVA_HOME = 'C:\Java\jdk-25'
$env:Path = "$env:JAVA_HOME\bin;$env:Path"
& "$env:JAVA_HOME\bin\java.exe" -version
& "$env:JAVA_HOME\bin\javac.exe" -version
Test-Path "$env:JAVA_HOME\bin\server\jvm.dll"Такой путь к DLL характерен для рассматриваемой Windows-поставки HotSpot; другие runtime могут иметь иную структуру. На Linux/macOS вместо where.exe используйте command -v java и command -v javac, затем обе команды -version. Файл jvm.dll относится к Windows, поэтому его поиск на Linux не является проверкой исправности Java.
Минимальная программа отделяет среду от проекта
Сохраните EnvironmentCheck.java отдельно от рабочего проекта:
public class EnvironmentCheck {
public static void main(String[] args) {
System.out.println("feature=" + Runtime.version().feature());
System.out.println("java.home=" + System.getProperty("java.home"));
System.out.println("os.arch=" + System.getProperty("os.arch"));
}
}Соберите javac -encoding UTF-8 --release 25 EnvironmentCheck.java и выполните java EnvironmentCheck. Для выбранного выпуска первая строка должна быть feature=25; остальные показывают реальный runtime процесса и его архитектуру, а не предполагаемую настройку редактора. Значения пути и архитектуры зависят от машины. Свойства System.
Если пример работает из терминала, но запуск проекта падает, сравните настройки этого запуска: возможно, IDE, Maven, Gradle или сторонняя обёртка выбирают другой runtime. Это сужает область поиска; успешный java -version не доказывает исправность всех установленных Java-приложений.
Разберите сообщение о недостающих компонентах
Текст вида jvm.dll: please install or use the JRE or JDK that contains these missing components сообщает о невозможности загрузки компонента, но сам по себе не определяет причину. Выполняйте проверки последовательно:
- Зафиксируйте имя программы и полный путь DLL из сообщения. Это может быть JDK проекта либо встроенный runtime самой программы.
- Проверьте существование указанного каталога и файла. Если путь указывает на удалённую версию, исправляйте конфигурацию launcher. Если установка неполная, восстановите целый дистрибутив из официального источника.
- Сверьте архитектуру запускающей программы, runtime и необходимых нативных компонентов. Наличие DLL не доказывает, что Windows может её загрузить: возможны несовместимые зависимости или ограничения доступа.
- Изучите журнал приложения и сообщения установщика. При блокировке защитным ПО проверьте причину и происхождение файла; отключение защиты не является диагностикой.
Не скачивайте случайную DLL и не копируйте её в System32: библиотека связана с конкретной сборкой JVM. Если ошибка относится к стороннему приложению, поддерживаемую версию runtime определяет его документация; современный JDK 25 может не быть заменой требуемой старой среде.
IntelliJ IDEA: два независимых выбора
У IntelliJ IDEA есть встроенный JetBrains Runtime, который запускает саму IDE. Его версия видна в Help → About; смена boot runtime не выбирает JDK учебного проекта. Обычно следует использовать поставляемый с IDE runtime. Если вручную настроенный boot runtime сломан, восстановите стандартный вариант по инструкции JetBrains. Boot runtime IDE.
Project SDK указывается отдельно в File → Project Structure → Project. Проверьте также SDK модуля и среду конкретной Run Configuration. Для Gradle/Maven собственный выбор JVM нужно согласовать с проектом. Если IDEA вообще не открывается, изменение .java и Project SDK не чинит runtime, который должен сначала запустить редактор. Настройка SDK проекта.
Практика: паспорт рабочего запуска
Составьте небольшой отчёт: команда запуска, найденные пути java/javac, их версии и результат EnvironmentCheck. В IDE сравните java.home из Run Configuration с выводом терминала. Не удаляйте старые установки ради эксперимента. Достаточно временно указать полный путь к выбранному исполняемому файлу и показать, какой именно процесс изменился.
Windows-команды и порядок диагностики сверены с документацией; примеры Java проверяются в Linux-контейнере. Работа установщика и загрузчика DLL на реальной Windows в этой проверке не воспроизводилась.
Частые вопросы
Почему JAVA_HOME правильный, а java показывает другую версию?
Терминал находит исполняемый файл по PATH, а некоторые приложения используют собственную настройку. Проверьте все найденные команды и попробуйте полный путь к java.exe нужного JDK в новом процессе.
Файл jvm.dll существует. Значит, ошибка ложная?
Нет. Загрузчик должен открыть файл и загрузить его зависимости в совместимый процесс. Ошибка доступа, другая архитектура или повреждённая установка возможны даже при положительном результате Test-Path.