Невозможно скомпилировать java-класс в Intellij Idea из-за ошибки "не найти символ класса X"
В моем проекте я создал новый Java-модуль с нуля. "create" src "папка" была выбрана в мастере создания модуля. В исходной папке есть единственный пакет "com", который содержит два открытых класса (например, A и B). Класс задает класс B. В IDE не отображаются ошибки, и источник B-класса открывается при нажатии "ctrl + B", когда курсор находится в имени класса внутри источника класса A. Но когда я пытаюсь скомпилировать класс A (по контекстному меню → "скомпилировать класс A.java" ), отображается следующая ошибка
Ошибка: (15, 20) не может найти класс символов B
"src" папка помечена как исходный корень.
Он выглядит как ошибка IDE.
Кто-то предложил сделать "File- > Invalidate Caches" для исправления подобной проблемы, также заданной в SO. Я пробовал это, и это не помогло.
Какая возможная причина этого и как ее можно исправить?
-
Intellij Idea Ultimate 11.1.5.
IDE Java: 1.7.0_45
Project SDK: 1.6.0_45
Ответы
Ответ 1
Сначала попробуйте выполнить компиляцию всего проекта (или, по крайней мере, класса B
).
Если вы компилируете только класс A
, класс B
не может быть найден, потому что он еще не скомпилирован (поэтому нет файла байта B.class
).
Это не интуитивно, а верно. IDEA автоматически не компилирует зависимые классы при компиляции одного класса.
Ответ 2
"щелкните правой кнопкой мыши по проекту → скомпилировать"
Это решило ту же проблему для меня.
Ответ 3
Выберите Build → Rebuild Project, он работает для меня!
Ответ 4
Если класс внутри пакета зависит от другого класса в пакете, вам необходимо создать путь к классам. В противном случае компилятор не знает, что другой класс действительно существует. Ваша IDE, вероятно, знает, что классы находятся в одном пакете, поэтому он не показывает никаких ошибок.
Вы можете решить эту проблему проще всего, предоставив оба класса в качестве аргументов компилятору (я не знаком с инструментом, который вы используете для компиляции, так что это может быть невозможно) или путем компиляции класса вне пакета который импортирует пакет "com". Оба они создадут файл classpath вместе с файлами классов.