Проверка IntelliJ дает «Не удается разрешить символ», но все равно компилирует код

569

Платформа: 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.stackoverflow.question;

import org.apache.log4j.Logger;
import com.hunnysoft.jmime.ByteString;
import com.hunnysoft.jmime.Field;
import com.hunnysoft.jmime.FieldBody;

public class StackOverflowQuestion {
    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 «StackOverflowQuestion.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-файл зависимости).

Итак, у кого-нибудь есть идеи?

Кевин Ситце
источник
См. Также stackoverflow.com/questions/15046764/… если он не может разрешить символы, которые являются частью maven-зависимостей [для меня это был отсутствующий M2_HOME]
rogerdpack
1
2018.3.3. Все та же ошибка ...
Дитер

Ответы:

999

Прежде всего вы должны попробовать, File | Invalidate Cachesи если это не поможет, удалите системный каталог IDEA . Затем повторно импортируйте проект Maven и посмотрите, поможет ли это.

В некоторых странных случаях скомпилированные классы могут сообщать неверную информацию и вводить в заблуждение IDEA. Убедитесь, что классы из этого jar сообщают правильные имена, используя javap .

CrazyCoder
источник
1
Я удалил файлы проекта, dirs, но это было до тех пор, пока кэш недействительных данных и перезагрузка не исправили это. Спасибо за совет! Интересно, нет ли способа сделать это автоматически. Вы бы так подумали. Я имею в виду, что я даже полностью импортировал проект из pom.xml, и он все еще не «аннулировал» его кеши.
Энтони Стаббс
9
FWIW, эти исправления не работали для меня. У меня есть проект Maven, который зависит от другого проекта. Сборки работают внутри и вне IDEA 10.5, но некоторые символы из другого проекта отмечены красным цветом в зависимом проекте. Недействительный кеш и перезапущен. Не повезло. Также удалены файлы IDEA и повторно импортирован зависимый проект. Не повезло.
pastafarian
10
Спасибо за ответ. В конечном итоге мне пришлось сказать IDEA «импортировать мой проект Maven с использованием Maven 3». Под Настройки-> Maven-> Импорт. Обнаружен после долгого обмена электронной почтой с support@jetbrains.com.
pastafarian
1
Теперь пункт меню «Файл | Неправильные кэши / перезапуск» (Android Studio 0.8.2, linux).
CoatedMoose
19
сделать недействительным не получилось, сколько бы раз я ни пытался. Я удалил папку .idea, а затем повторно импортировал проект с помощью build.gradle. Это работает сейчас.
HelpMatters
108

Следующий трюк решил эту проблему для меня:

  • Щелкните правой кнопкой мыши на редакторе кода
  • Наведите на Maven и разверните
  • Нажмите на Reimport

Моя идея версия 12.0.4

rshahriar
источник
Как мне сделать это в IntelliJ для Mac OS?
Анкит Рустаги
@AnkitRustagi для Mac OS щелкните правой кнопкой мыши каталог проекта под панелью проекта. Maven -> Reimport. Вы также можете использовать горячую клавишу, двойное касание или Shift + Command + A и искать «реимпортировать все maven проекты»
Лакота Лефлер,
5
Правый клик - это подсказка для меня. Очевидно, что мой pom.xml не помечен как файл maven, поэтому мне нужно щелкнуть правой кнопкой мыши и отметить как Maven. Я включил «Импортировать проекты Maven автоматически» и все пакеты, импортированные после этого.
Расяди
4
для 2017.1.x работает реимпорт maven проектов:, View -> Tool Windows -> Maven Projectsзатем нажмите на значок стрелки цикла.
Велинко
Повторный импорт модуля Maven также помог мне, я был удивлен, что он не был
Рич
37

Ни одно из приведенных выше решений не помогло мне. То, что делало, удаляло файл main.iml вручную, и это внезапно работало.

Cerisier
источник
4
Большое спасибо! Это также было единственным решением, которое решило проблему, с которой я столкнулся. Произошло то, что мой проект был переименован, и IntelliJ почему-то не удалил старые файлы .iml в .idea / modules. Удалите эти лишние файлы .iml и перестройте проект, исправив проблему.
Чен,
Работал! Большой! Но было бы неплохо, если бы кто-то мог объяснить, почему это работает.
Хамза Бельмеллуки
1
Где этот файл? Я удалил <projectname> .idl и теперь структура проекта исчезла !! кроме того, настройки не могут быть загружены, потому что файл iml не существует
KansaiRobot
Отлично работает. Я пытался изменить JDK, сделать недействительными кэши, переимпортировать проект, ничего не получалось. Удаление main.iml работает.
rs_
31

Для пользователей Gradle:

Возможно, вам придется синхронизировать ваш проект с вашим build.gradleфайлом.

Вы можете щелкнуть правой кнопкой мыши на своем файле Gradle в области Project, чтобы сделать это, но это, похоже, ничего не сделало для меня (я подозреваю, что ошибка в моей версии). Вы будете знать, если это произойдет, потому что это не будет запускать любые задачи IntelliJ, которые вы будете ждать. Вместо этого откройте панель инструментов Gradle , затем нажмите кнопку синхронизации (обновления). Это сработало для меня, когда аннулирование кэша и перезапуск не сделали.

Мои собственные обстоятельства: я использовал проект Scala с Gradle и должен был это сделать.

bbarker
источник
Я просто хочу отметить, что мне нужно было сделать это снова после небольшого рефакторинга системы сборки; каким-то образом IntelliJ обнаружил некоторые проблемы с моим файлом build.gradle, которые раньше не появлялись. В итоге удалось заставить все это отработать довольно быстро.
bbarker
7
Панель инструментов Gradle находится по адресу: View > Tool Windows > Gradle
UTF_or_Death
@bbarker - я только что обновил IntelliJ до последней версии на воскресенье, 6 августа 2017 года. Проблема, о которой вы упоминаете, когда вы щелкаете правой кнопкой мыши файл build.gradle на панели файлов проекта и ничего не происходит, все еще существует. К счастью, ваш совет по использованию кнопки «Обновить» в окне инструмента Gradle («Просмотр» -> «Инструменты Windows» -> «Gradle») сработал отлично.
Роберт Ошлер
На заметку о проблемах build.gradle: Иногда IntelliJ находит несуществующие проблемы, если у вас нет запущенных конфигураций. Однажды у меня было что-то странное, mavenCentral() could not be resolvedпока я не добавил обратно конфигурации jUnit (я перенес весь проект в Gradle, создав новый проект Gradle, а затем скопировал все исходные файлы).
Егор Ганс
28

Это было упомянуто в другом ответе на этот же вопрос здесь , но это одно исправляет это для меня. Я делаю все свои сборки в отдельном терминале вне IntelliJ. Таким образом, кэш должен иметь надлежащие права доступа для приложения IntelliJ для их чтения.

Запустите его из корневой папки проекта.

$ mvn -U idea:idea
Том
источник
Я думаю, что это может помочь ... но, к сожалению, его запуск дает время ожидания соединения. Не удалось подключиться к репо :(
KansaiRobot
ты спас мой (вторая половина) день!
Гавриил
19

Еще один дополнительный шаг, когда я сделал File -> Invalidate Caches и перезапустил IDE, открыл проект. В верхнем правом углу появилась всплывающая подсказка с вопросом, нужно ли включить автоматический импорт, и это решило проблему.

Мэтью Чен
источник
14

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

Лэндон Кун
источник
11

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

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

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

Бабкен Варданян
источник
1
В заключение. По какой-то причине в моем списке было два модуля: «основной» и название моего проекта. Убрал основной, и ошибки ушли.
Бобби
9

Было ли опубликовано исправление? Появляется проблема, изначально затронутая v11 / 12 из-за «пересмотра компилятора» еще в 2013 году. С обсуждением связанных проблем в Jira до конца 2014 года. Http://youtrack.jetbrains.com/issue/IDEA-98425

Также на Jira IDEA-98425 был отмечен как исправленный, но не проверенный (на v12.0.3). Ни один из следующих обходным помогли решить эту проблему «Невозможно не Resolve Символ» вопрос с версии 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 кажется сломанной.


источник
Проблема исчезла ... после того, как я "Открыть" проект вместо проекта "Импорт" ... чертовски странно.
Это сработало для меня! :) Потерял рабочий день, но это сработало. Интересно, в чем разница между открытием и импортом
Арран
5

Структура моего проекта:

src -> main -> scala -> mypackages

Что сработало:

Щелкните правой кнопкой мыши scalaпапку и выберите «Пометить каталог как корень источника».

аксиома
источник
4

Ни один из других ответчиков не работал на меня. Мой импорт не был решен, потому что IntelliJ указал на неправильный файл .m2.

Версия IntelliJ: IntelliJ Idea 2018.1.5

Мое местоположение для каталога .m2 было указано неверный путь. Все, что я сделал, чтобы это исправить, это переместил IntelliJ в правильный каталог .m2 и обновил его.

Сначала перейдите в: Файл-> Настройки-> Сборка, Выполнение, Развертывание-> Инструменты сборки-> Maven

Мне пришлось изменить файл настроек пользователя: и локальный репозиторий: на правильное расположение моего каталога .m2.

После этого перейдите к: Файл-> Настройки-> Сборка, Выполнение, Развертывание-> Инструменты сборки-> Maven-> Хранилища

и нажмите кнопку Обновить.

Тим
источник
3

Для другой альтернативы.

Я получил эту проблему также, когда я использовал JDK7_07. Я попробовал все ответы здесь (кроме удаления системного каталога IDEA). Но у меня все еще есть проблема. Итак, что я сделал это:

Установите новейший JDK (это был JDK7_45) и установите новый IntelliJ's JDK, и он работает.

ismailsunni
источник
Если бы у вас была проблема с Intellij IDEA 2019.3 и JDK 11.0.3 в комплекте, и она была решена путем ручной установки JDK 11.0.4, см. Здесь: stackoverflow.com/questions/61338200/…
Бенджамин Зак
3

У меня просто была эта проблема, и она просто не ушла бы. В конце концов я удалил каталог конфигурации IntelliJ ~и перестроил свой проект IntelliJ с нуля. (В итоге это заняло около 15 минут, по сравнению с тем, как потратить час на решение проблем с кэшированными файлами и т. Д.)

Обратите внимание, что я предполагаю, что первоначальная проблема была вызвана чем-то вроде javathings.blogspot.com/2009/11/too-many-open-files-in-intellij-idea.html(примечание: по состоянию на 2018 г. эта ссылка устарела, но на сайте archive.org имеется копия страницы, когда этот ответ был впервые написан, -). проблема с дисковым пространством / памятью, вызывающая сбой Java. Кажется, что IntelliJ просто испортился.

mozboz
источник
3

Если ваш maven-проект является многомодульным, проверьте, не были ли некоторые модули игнорированы intellij.

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

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

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

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

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

Searene
источник
2

Да, звучит так, будто вам нужно создать библиотеки, содержащие нужные вам JAR-файлы, и добавить их в качестве зависимости в ваш модуль.

duffymo
источник
2

После аннулирования моего кэша и перезапуска; и подтверждая, что мои настройки maven были в порядке, я все еще видел «Не удается разрешить символ» для модуля, который я определенно установил как зависимость. Оказывается, я установил неправильную область.

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

user3565334
источник
2

Повторный импорт проекта работал для меня. Щелкните правой кнопкой мыши на Project -> Maven -> Reimport

когда я сделал File -> Invalidate Caches и перезапустил IDE, открыл проект. Он показал диалоговое окно в правом верхнем углу «Обнаружены изменения Maven» и дал возможность импортировать и включить автоматический импорт. Даже после импорта проекта у меня возникла та же проблема. Вышеуказанный шаг решил проблему.

Sandeep
источник
2

В моем случае, я пытаюсь открыть проект весенней загрузки из IntellijIdea, возникла та же проблема, что и невозможно импортировать все файлы, связанные с пружиной.

Тогда я сделал:

Файл -> Закрыть проект -> Импорт проекта -> Импорт из внешней модели -> Выбрать Gradle -> Далее -> Выбрать проект из местоположения файла -> Готово

Теперь все работает нормально, как и ожидалось.

Я видел много ответов здесь, но я наконец нашел это решение. Это может использовать для кого-то, как я.

Шилендра Мадда
источник
1

В моем случае удаляется только buildDir. В этом случае File | Invalidate Cachesне работает.

Когда я делаю Build | Make Projectраньше File | Invalidate Caches, все работает отлично.

chiguri
источник
это выдало ошибку: выпуск 5 выпуска ошибки Java не поддерживается
KansaiRobot
@ KansaiRobot Похоже, ваш проект сконфигурирован для использования Java 5. В настоящее время большинству библиотек требуется как минимум Java 8, и нет особых причин использовать что-то более низкое (в JDK много чего произошло, как с точки зрения новых функций, так и производительности). так что попробуйте еще раз с Java 8 или выше.
Егор Ганс
1
  1. Открыть настройки"
  2. Поиск "Maven"
  3. Нажмите «Игнорируемые файлы» в разделе «Maven»
  4. Снимите отметку с файлов pom.xml, которые содержат отсутствующие зависимости
  5. Нажмите "ОК"
  6. Нажмите Файл -> Недействительные кэши / Перезапустить ...
  7. Нажмите «Отменить и перезагрузить»
Джаспер Сити
источник
в 4 нет pom.xml на экране,
KansaiRobot
1

Ни одно из вышеперечисленных решений не решило это для меня. У меня была та же проблема, когда код компилировался нормально, но IntelliJ показал, что он не может найти импорт. Несмотря на то, что IntelliJ предложил импорт в первую очередь после завершения кода.

Мое решение состояло в том, чтобы переместить все в пакет по умолчанию, удалить com.foo.barпакет, затем создать его снова и переместить все обратно.

jmhage
источник
1

Предлагаемые решения не сработали. Мне пришлось игнорировать несколько проектов, щелкнув правой кнопкой мыши на проекте pom => maven => unignore.

Потом после

mvn clean install -T 6 -DskipTests

в консоли IntelliJ снова был счастлив. Понятия не имею, как проекты стали игнорироваться ...

Рональд Теун
источник
1

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

Nilesh
источник
1

Удалите файл: iml, найденный в java и тестовых папках внутри проекта, и сделайте его недействительным и перезапустите.

Он спросит, могу ли я удалить проекты. Поставь да. Ошибка исчезнет.

Харриш Гомахан
источник
1

Для меня работало «Пометить как корневой каталог источника» каталог, в котором находился красный помеченный класс, после чего красная метка исчезла. Кажется, что по какой-то причине это было без опознавательных знаков.

Темный ангел
источник
1

Для 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
Эрик
источник
0

если проект maven, то просто зайдите в настройки -> инструменты сборки -> maven -> импорт. установите флажок «Импортировать проект maven автоматически». решит проблему.

Джонни Мартин
источник
0

У меня работали недействительные кэши, но после запуска приложения возникла та же ошибка.

Итак, я попробовал ( Intellij ):

1 - Строка меню - Refactor | Построить | Запустить | Инструменты - нажмите Build, затем Rebuild Project

2 - МВН чистый

3 - Щелкните правой кнопкой мыши по проекту> Maven> Создать источники и папку обновления

Надеюсь, что это работает для вас.

Спасибо

Djalas
источник
0

Или, возможно, импортируемый вами файл слишком велик. Это мой случай, когда я изменяю свойство Intellij: iead.max.intellisen.filesize (путь равен $ {idea dir} /bin/idea.properties) на большее значение, например 25000, и перезапустите IDE, проблема исчезла. Надеюсь это поможет.

Чаожун Чжун
источник