Проверка IntelliJ выдает "Не удается разрешить символ", но все равно компилирует код
Платформа: IntelliJ Community Edition 10.0.3
SDK: jdk1.6.0_21
ОС: Windows 7
Таким образом, у меня есть странная ситуация с IntelliJ, которая поставила меня в тупик. Я настраиваю проект Maven и добавляю log4j в качестве зависимости в файл pom.xml. Инспекции IDEA проходят нормально, и все мои модульные тесты компилируются и запускаются.
Затем я добавил библиотеку hunnysoft jmime в мой локальный репозиторий maven с помощью mvn install:install-file следующим образом.
mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \
-DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar
Maven прекрасно установил файл jar в мой локальный репозиторий.
Затем я зашел в настройки IntelliJ's Settings => Maven => Repository Services и обновил мой локальный репозиторий (чтобы IntelliJ переиндексировал содержимое репозитория).
Наконец, я добавил следующую зависимость в мой файл pom.xml (чуть выше зависимости log4j).
<dependency>
<groupId>jmime</groupId>
<artifactId>jmime</artifactId>
<version>3.1.1e</version>
</dependency>
Теперь я создаю новый класс следующим образом:
package com.stackru.question;
import org.apache.log4j.Logger;
import com.hunnysoft.jmime.ByteString;
import com.hunnysoft.jmime.Field;
import com.hunnysoft.jmime.FieldBody;
public class StackruQuestion {
public Field create(String name, String text) {
Logger.getLogger(getClass()).debug("create entered");
FieldBody body = new FieldBody();
body.setText(new ByteString(text));
Field field = new Field();
field.setFieldName(name);
field.setFieldBody(body);
return field;
}
}
Теперь для странности. Механизм намерений IntelliJ подхватывает и распознает импорт Logger в файле maven pom. Однако для всех импортов hunnysoft он сообщает: "Не удается разрешить символ" ByteString/Field/FieldBody "", НО Build => Compile "StackruQuestion.java" компилирует все правильно, и созданный мной модульный тест для этого класса работает нормально (хотя намерения помечают вызов create() как проблемную область).
Так что где-то, каким-то образом IntelliJ игнорирует файл jmime.jar для подсистемы намерений. Я запутался, потому что зависимость log4j работает нормально, и все компилируется и работает нормально. F12 ("Перейти к декларации") работает с импортом Logger, но разбивает на все импорты jmime.
О, еще одна вещь, если я перехожу к представлению "Пакеты" в окне "Проекты", появляется пакет "com.hunnysoft.jmime", и я вижу ВСЕ классы, которые я импортировал в приведенном выше фрагменте кода в разделе "Библиотеки"., Удаление вышеуказанной зависимости из файла pom.xml приводит к исчезновению этого пакета и разрыву компиляции.
Похоже, что путь к классу проверки нарушен, но, похоже, нигде в настройках этого параметра нет настроек => Намерения | Области компиляции (не то чтобы я ожидал каких-либо таких настроек, я считаю, что IDEA уже должна знать правильный путь к классу на основе файла pom и JDK).
В качестве последнего эксперимента я создал совершенно новый стандартный проект приложения J2SE (без использования maven) и добавил файл jmime.jar непосредственно в проект в качестве одной из его библиотек. Я столкнулся с точно такими же проблемами, как описано выше в этом новом проекте.
Вот файл MANIFEST.MF из файла jar jmime.
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.5.4
Created-By: 10.0-b23 (Sun Microsystems Inc.)
Name: com/hunnysoft/jmime/
Sealed: true
Specification-Title: Hunny JMIME
Specification-Version: 3.1.1
Specification-Vendor: Hunny Software, Inc.
Implementation-Title: com.hunnysoft.jmime
Implementation-Version: 3.1.1E
Implementation-Vendor: Hunny Software, Inc.
Я не вижу ничего необычного в этом фляге.
Мое лучшее предположение состоит в том, что, возможно, проблема может заключаться в отсутствующей зависимости. Но AFAIK jmime должен быть автономным (JarAnalyzer ничего не предлагает, но я не уверен, что так будет, если отсутствует jar-файл зависимости).
Итак, у кого-нибудь есть идеи?
66 ответов
Прежде всего, вы должны попробовать File | Invalidate Caches
и если это не поможет, удалите системный каталог IDEA. Затем повторно импортируйте проект Maven и посмотрите, поможет ли это.
В некоторых странных случаях скомпилированные классы могут сообщать неверную информацию и вводить в заблуждение IDEA. Убедитесь, что классы из этого jar сообщают правильные имена, используя javap.
Следующий трюк решил эту проблему для меня:
- Щелкните правой кнопкой мыши на редакторе кода
- Наведите на Maven и разверните
- Нажмите на Reimport
Моя идея версия 12.0.4
Ни одно из приведенных выше решений не помогло мне. Что было сделано, так это удалить файл main.iml вручную, и он неожиданно сработал
Это было упомянуто в другом ответе на этот же вопрос здесь, но это одно исправляет это для меня. Я делаю все свои сборки в отдельном терминале вне IntelliJ. Таким образом, кэш должен иметь надлежащие разрешения, установленные для приложения IntelliJ для их чтения.
Запустите его из корневой папки проекта.
$ mvn -U idea:idea
Для пользователей Gradle:
Возможно, вам придется синхронизировать ваш проект с вашим build.gradle
файл.
Вы можете щелкнуть правой кнопкой мыши на своем файле Gradle в области Project, чтобы сделать это, но это, похоже, ничего не сделало для меня (я подозреваю, что ошибка в моей версии). Вы будете знать, если это произойдет, потому что это не будет запускать любые задачи IntelliJ, которые вы будете ждать. Вместо этого откройте панель инструментов Gradle, затем нажмите кнопку синхронизации (обновления). Это сработало для меня, когда аннулирование кэша и перезапуск не сделали.
Мое собственное обстоятельство: я использовал проект Scala с Gradle и должен был это сделать.
Еще один дополнительный шаг, когда я сделал File -> Invalidate Caches и перезапустил IDE, открыл проект. В верхнем правом углу появилась всплывающая подсказка с вопросом, нужно ли включить автоматический импорт, и это решило проблему.
Непоследовательные / повторяющиеся имена модулей в структуре проекта вызывали эту проблему для меня.
- Идти к
File -> Project Strucutre -> Modules
- В Нажмите на модули с красным подчеркиванием
- Перейдите на вкладку "Зависимости"
- Убедитесь, что красные зависимости действительно существуют в списке зависимостей. Если нет, переименуйте их, чтобы они соответствовали существующим именам зависимостей.
Это может произойти, когда IntelliJ не закрывается должным образом и, следовательно, не может правильно сохранить переименованные имена модулей.
Еще одна вещь, чтобы проверить: убедитесь, что зависимости не дублируются. В моем случае я обнаружил, что модуль, демонстрирующий такое поведение, был неправильно настроен следующим образом: он зависел от другого модуля и зависел от jar, созданного этим другим модулем. Это означало для каждого символа, на который есть ссылки в двух экземплярах, и было неоднозначным.
Было ли опубликовано исправление? Появляется проблема, изначально затронутая v11/12 из-за "пересмотра компилятора" еще в 2013 году. С обсуждением связанных проблем в Jira до конца 2014 года. http://youtrack.jetbrains.com/issue/IDEA-98425
Также на Jira IDEA-98425 был отмечен как исправленный, но непроверенный (на v12.0.3). Ни один из следующих обходных путей не помог решить проблему "Невозможно разрешить символ" в Версии 13.1.1 в Windows
а. Удалите папку .IdealIC13 (затем Файл \ Неправильный кэш / Перезапуск)
б. Из окна Maven Projects,
b.1 mvn -U idea: idea -〉 Выполнение этой maven-цели предполагает перезагрузку зависимостей. Это работает раньше, но с момента последней FRI выполнение этой maven-цели не удалось, так как он попытался перекомпилировать проект (конечно, он завершается с ошибкой "Невозможно разрешить символы", вот что я пытаюсь исправить, выполнив эту команду в первую очередь) mvn -version - показывает версию maven со ссылкой на 3.2.5 и работает
б.2 Просто щелкните правой кнопкой мыши проект и повторно импортируйте
b.3 File \ Invalidate Caches / Restart
с. Пробовал включить и отключить этот параметр: Файл -> Настройки -> Maven -> Импорт -> "Использовать maven3 для импорта проекта"
д. Настройки \ Maven \ Политика сбоя многопроектной сборки = Ошибка в конце (вместо значения по умолчанию)
Ничего не работает Что происходит с поддержкой IntelliJ на Maven.
https://youtrack.jetbrains.com/issue/IDEA-99302
Из истории выпуска JetBeans, https://www.jetbrains.com/company/history.jsp
IntelliJ v14 ноября 2014
IntelliJ v13 DEC 2013
Я предполагаю, что исправленная версия 12 (хотя и не проверенная) будет включена в последующие выпуски У кого-то есть похожие проблемы с какой версией IntelliJ? Пожалуйста, поделитесь своим опытом. Поддержка IntelliJ maven кажется сломанной.
Обновление 2022
IntelliJ 2022.1 имеет интерактивный пошаговый процесс
File -> Repair IDE
. Он проведет вас через 5 последовательных шагов, чтобы попытаться решить эту проблему для текущего проекта, прежде чем аннулировать кеши для всех проектов. Из документации IDEA :
- Обновить индексы проекта
- Повторное сканирование индексов проекта
- Повторно открыть проект
- Удалить общие индексы
- Переиндексировать проект
- Недействительные кеши и перезапуск
Шаги 1-3 исправили это для моего проекта.
Ни один из других ответчиков не работал на меня. Мой импорт не был решен, потому что IntelliJ указал на неправильный файл.m2.
Версия IntelliJ: IntelliJ Idea 2018.1.5
Мое местоположение для каталога .m2 было указано неверный путь. Все, что я сделал, чтобы это исправить, это переместил IntelliJ в правильный каталог.m2 и обновил его.
Сначала перейдите в: Файл-> Настройки-> Сборка, Выполнение, Развертывание-> Инструменты сборки->Maven
Мне пришлось изменить файл настроек пользователя: и локальный репозиторий: на правильное расположение моего каталога.m2.
После этого перейдите в: Файл-> Настройки-> Сборка, Выполнение, Развертывание-> Инструменты сборки->Maven-> Хранилища
и нажмите кнопку Обновить.
Я завидую всем, кто решил проблему с помощью кешей File / Invalidate. Я просто часами пробовал все по этому вопросу и еще нескольким другим из Интернета.
Пункт волшебного меню не помог мне, поэтому я сам аннулировал кеши, нанеся ядерную бомбу.
%USERPROFILE%\AppData\Local\JetBrains\IntelliJIdea2020.3\caches
Как только я сделал это и перезапустил IntelliJ (2020.3), индексы были перестроены, и мои ошибки исчезли.
У меня была проблема с Maven Importer JDK - каким-то образом он переключился на JDK 11, но перезагрузка Maven Project работала только с JDK 8.
Структура моего проекта:
src -> main -> scala -> mypackages
Что сработало:
Щелкните правой кнопкой мыши на scala
и нажмите "Пометить каталог как корень источника".
Если ваш maven-проект является многомодульным, проверьте, не были ли некоторые модули игнорированы intellij.
- Нажмите View -> Tool Windows -> Maven Projects и проверьте, игнорируются ли некоторые модули (игнорируемые модули отображаются серым цветом, например
gs-multi-module
на следующем изображении).
- Щелкните правой кнопкой мыши на игнорируемом модуле и выберите
Unignore Projects
,
Затем подождите, пока intellij завершит индексацию, после чего она заработает.
Для Gradle проектов:
- Выход из IntelliJ IDEA
- Удалить
<problematic-project-root>/.idea
каталог - Удалить
<problematic-project-root>/.gradle
каталог - Удалить все
.iml
файлы в<problematic-project-root>
- командная строка windows:
DEL /S /Q *.iml
- Linux:
find . | grep -e .iml$ | xargs rm
- командная строка windows:
- Повторно импортируйте проект в IntelliJ IDEA с помощью Gradle
В IntelliJ IDEA
2020.3
, Выбрать:
В моем случае, я пытаюсь открыть проект весенней загрузки из IntellijIdea, возникла та же проблема, что и невозможно импортировать все файлы, связанные с пружиной.
Тогда я сделал:
Файл -> Закрыть проект -> Импортировать проект -> Импорт из внешней модели -> Выбрать Gradle -> Далее -> Выбрать проект из местоположения файла -> Готово
Теперь все работает нормально, как и ожидалось.
Я видел много ответов здесь, но я наконец нашел это решение. Это может использовать для кого-то, как я.
Для другой альтернативы.
Я получил эту проблему также, когда я использовал JDK7_07. Я попробовал все ответы здесь (кроме удаления системного каталога IDEA). Но у меня все еще есть проблема. Итак, что я сделал это:
Установите новейший JDK (это был JDK7_45) и установите новый IntelliJ's JDK, и он работает.
Повторный импорт проекта работал для меня. Щелкните правой кнопкой мыши на Project -> Maven ->Reimport
когда я сделал File -> Invalidate Caches и перезапустил IDE, открыл проект. Он показал диалоговое окно в правом верхнем углу "Обнаружены изменения Maven" и дал возможность импортировать и включить автоматический импорт. Даже после импорта проекта у меня возникла та же проблема. Вышеуказанный шаг решил проблему.
Я пытался
File -> Invalidate and Restart
который не работал для меня.
Решение, которое действительно сработало:
Project Structure -> Modules -> select target folder -> Right click generated-sources and select sources -> Apply -> ok
Да, звучит так, будто вам нужно создать библиотеки, содержащие нужные вам JAR-файлы, и добавить их в качестве зависимости в ваш модуль.
Иногда я просто открываю структуру проекта и щелкаю проект, затем выбираю версию SDK.
Предлагаемые решения не сработали. Мне пришлось игнорировать несколько проектов, щелкнув правой кнопкой мыши на проекте pom => maven => unignore.
Потом после
mvn clean install -T 6 -DskipTests
в консоли IntelliJ снова был счастлив. Не знаю, как проекты стали игнорироваться...
У меня просто была эта проблема, и она просто не ушла бы. Я в конечном итоге уничтожил каталог конфигурации IntelliJ в ~
и перестроил мой проект IntelliJ с нуля. (В итоге это заняло около 15 минут, по сравнению с тем, как потратить час на решение проблем с кэшированными файлами и т. Д.)
Обратите внимание, что я предполагаю, что первоначальная проблема была вызвана чем-то вроде javathings.blogspot.com/2009/11/too-many-open-files-in-intellij-idea.html
(Примечание: по состоянию на 2018 г. эта ссылка устарела, но на сайте archive.org имеется копия этой страницы, когда этот ответ был впервые написан на языке.) Или проблема с дисковым пространством / памятью, вызывающая сбой Java. Кажется, что IntelliJ просто испортился.
После аннулирования моего кэша и перезапуска; и подтверждая, что мои настройки maven были в порядке, я все еще видел "Не удается разрешить символ" для модуля, который я определенно установил как зависимость. Оказывается, я установил неправильную область.
Вы можете проверить, щелкнув правой кнопкой мыши по вашему модулю и выбрав Открыть настройки модуля. Перейдите на вкладку зависимостей и убедитесь, что для области вашей неразрешимой зависимости задано значение Компилировать.
- Открыть настройки"
- Поиск "Maven"
- Нажмите "Игнорируемые файлы" в разделе "Maven"
- Снимите отметку с файлов pom.xml, которые содержат отсутствующие зависимости
- Нажмите "ОК"
- Нажмите Файл -> Недействительные кэши / Перезапустить...
- Нажмите "Отменить и перезапустить"
mvn idea:idea
работал на меня. Нашел это здесь. Потратил больше часа, надеюсь, кому-то это поможет
В моем случае мой проект использовал Lombok, и мне не хватало плагина Lombok в IntelliJ. После установки все заработало.