Проверка 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, открыл проект. В верхнем правом углу появилась всплывающая подсказка с вопросом, нужно ли включить автоматический импорт, и это решило проблему.

Непоследовательные / повторяющиеся имена модулей в структуре проекта вызывали эту проблему для меня.

  1. Идти к File -> Project Strucutre -> Modules
  2. В Нажмите на модули с красным подчеркиванием
  3. Перейдите на вкладку "Зависимости"
  4. Убедитесь, что красные зависимости действительно существуют в списке зависимостей. Если нет, переименуйте их, чтобы они соответствовали существующим именам зависимостей.

Это может произойти, когда IntelliJ не закрывается должным образом и, следовательно, не может правильно сохранить переименованные имена модулей.

Еще одна вещь, чтобы проверить: убедитесь, что зависимости не дублируются. В моем случае я обнаружил, что модуль, демонстрирующий такое поведение, был неправильно настроен следующим образом: он зависел от другого модуля и зависел от jar, созданного этим другим модулем. Это означало для каждого символа, на который есть ссылки в двух экземплярах, и было неоднозначным.

Дважды нажмите "shift"> "Reimport All Maven projects" у меня всегда работает.

Было ли опубликовано исправление? Появляется проблема, изначально затронутая 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. Обновить индексы проекта
  2. Повторное сканирование индексов проекта
  3. Повторно открыть проект
  4. Удалить общие индексы
  5. Переиндексировать проект
  6. Недействительные кеши и перезапуск

Шаги 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.

  1. Нажмите View -> Tool Windows -> Maven Projects и проверьте, игнорируются ли некоторые модули (игнорируемые модули отображаются серым цветом, например gs-multi-module на следующем изображении).

введите описание изображения здесь

  1. Щелкните правой кнопкой мыши на игнорируемом модуле и выберите Unignore Projects,

введите описание изображения здесь

Затем подождите, пока intellij завершит индексацию, после чего она заработает.

Для Gradle проектов:

  1. Выход из IntelliJ IDEA
  2. Удалить <problematic-project-root>/.idea каталог
  3. Удалить <problematic-project-root>/.gradle каталог
  4. Удалить все .iml файлы в <problematic-project-root>
    • командная строка windows: DEL /S /Q *.iml
    • Linux: find . | grep -e .iml$ | xargs rm
  5. Повторно импортируйте проект в IntelliJ IDEA с помощью Gradle

В IntelliJ IDEA 2020.3, Выбрать:

  1. File > Invalidate Caches / Restart... > Invalidate and Restart

  2. При появлении запроса на загрузку предварительно созданных общих индексов :

    не импортируйте общие индексы: закройте диалоговое окно или выберите Дополнительные действия > Больше не показывать

В моем случае, я пытаюсь открыть проект весенней загрузки из 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 были в порядке, я все еще видел "Не удается разрешить символ" для модуля, который я определенно установил как зависимость. Оказывается, я установил неправильную область.

Вы можете проверить, щелкнув правой кнопкой мыши по вашему модулю и выбрав Открыть настройки модуля. Перейдите на вкладку зависимостей и убедитесь, что для области вашей неразрешимой зависимости задано значение Компилировать.

  1. Открыть настройки"
  2. Поиск "Maven"
  3. Нажмите "Игнорируемые файлы" в разделе "Maven"
  4. Снимите отметку с файлов pom.xml, которые содержат отсутствующие зависимости
  5. Нажмите "ОК"
  6. Нажмите Файл -> Недействительные кэши / Перезапустить...
  7. Нажмите "Отменить и перезапустить"

mvn idea:idea работал на меня. Нашел это здесь. Потратил больше часа, надеюсь, кому-то это поможет

В моем случае мой проект использовал Lombok, и мне не хватало плагина Lombok в IntelliJ. После установки все заработало.

Другие вопросы по тегам