Гид по технологиям

Как исправить ошибку Could Not Find or Load Main Class в Java

3 min read Java Обновлено 06 Dec 2025
Could Not Find or Load Main Class в Java — руководство
Could Not Find or Load Main Class в Java — руководство

человек за ноутбуком с открытым редактором кода

Введение

Если вы постоянно видите ошибку «Could Not Find or Load Main Class» в Java-проекте без очевидной причины — вы не одиноки. JVM по умолчанию полагается на classpath, и малейшая рассинхронизация между тем, где находятся .class-файлы, и тем, где JVM их ищет, приводит к этой проблеме. В этой статье разберём, что такое classpath, почему Java не находит главный класс, как это исправить в простых и сложных проектах, а также дадим чек-листы, плейбук и диагностическую диаграмму для быстрого решения.

Важно: все команды и пути чувствительны к регистру в UNIX-подобных системах. На Windows регистр обычно не учитывается, но другие проблемы при запуске остаются актуальными.

Почему JVM не находит главный класс

JVM ищет исполняемый класс (который содержит public static void main(String[])) в местах, указанных в classpath. Если путь указан неверно, если класс находится в пакете, но вы пытаетесь запустить его без префикса пакета, или если вы используете команду java -jar (которая игнорирует -classpath), то JVM вернёт ошибку.

Коротко о причинах:

  • Неправильный classpath (отсутствует нужная директория или JAR).
  • Неверное имя пакета или несоответствие путей и пакетов.
  • Компиляция не сохранила .class в ожидаемую директорию.
  • Запуск JAR без правильного Main-Class в манифесте.
  • Модульная система Java (JPMS) с неверными –module-path или модулем.
  • Несовпадение версии байткода и JVM (редко вызывает именно это сообщение, но мешает загрузке).

Что такое classpath?

Classpath — это список директорий и JAR-файлов, где JVM ищет классы и ресурсы. Его можно задать:

  • опцией -classpath или -cp при запуске java;
  • через системную переменную окружения CLASSPATH (не рекомендуется полагаться на неё);
  • внутри плагинов сборки (Maven/Gradle) или IDE-конфигурации.

Classpath указывает именно корень, откуда начинаются пакеты. Если у вас есть пакет testPackage и файл Test.class, то корень должен быть папкой, содержащей папку testPackage.

Пример: пакеты и запуск (минимальный сценарий)

Создадим класс Test в пакете testPackage:

package testPackage;
public class Test {
    public static void main(String args[]) {
        System.out.println("File successfully found!");
    }
}

Шаги в терминале (в каталоге, который содержит папку testPackage):

  1. Компиляция (если у вас только этот файл в текущей директории):
javac testPackage/Test.java
  1. Запуск по полностью квалифицированному имени (обращение из каталога-«корня»):
java testPackage.Test

Если вы можете запустить таким образом — JVM нашла .class относительно текущего рабочего каталога.

Организация директорий: рекомендованная практика

Для проектов удобнее разделять исходники и .class файлы:

Пример до компиляции:

|---myFolder
|     |---src
|           |---testPackage
|                       |---Test.java
|     |---classes

Компилируем, указывая выходную директорию для .class:

javac -d classes src/testPackage/Test.java

После компиляции структура:

|---myFolder
|     |---src
|           |---testPackage
|                       |---Test.java
|     |---classes
|           |---testPackage
|                       |---Test.class

Запуск из myFolder с указанием classpath:

java -classpath classes testPackage.Test

Или короче:

java -cp classes testPackage.Test

Обратите внимание: в команде java вы указываете корень для пакетов — папку classes.

Типичные ошибки и как их обнаружить

  1. Запуск без префикса пакета
  • Симптом: вы находитесь в myFolder и запускаете java Test — JVM не найдёт, т.к. Test.class лежит в classes/testPackage.
  • Исправление: java -cp classes testPackage.Test
  1. Использование java -jar вместе с -cp
  • Симптом: java -jar app.jar -cp lib/* — при использовании -jar JVM игнорирует -cp, и используется только classpath, объявленный в манифесте JAR.
  • Исправление: либо укажите Main-Class и Class-Path в манифесте JAR, либо запустите с опцией -cp: java -cp
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Скрапинг сайтов в Google Sheets через IMPORTXML
Веб-скрапинг

Скрапинг сайтов в Google Sheets через IMPORTXML

Как сделать отступ в Excel — ячейка и строка
Excel

Как сделать отступ в Excel — ячейка и строка

Перепродажа секонд‑хенд товаров на eBay
Руководство

Перепродажа секонд‑хенд товаров на eBay

Показать дату и время в панели задач Windows 10
Windows 10

Показать дату и время в панели задач Windows 10

Windows 7 Upgrade Advisor: скачать и запустить
Windows

Windows 7 Upgrade Advisor: скачать и запустить

Как исправить код ошибки w02 на Virgin Media
Руководство

Как исправить код ошибки w02 на Virgin Media