Инспекция 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 следующим образом.

mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \
-DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar

Maven точно установил файл jar в мой локальный репозиторий.

Затем я перешел в IntelliJ Settings = > Maven = > Репозиторий и обновил локальный репозиторий (чтобы 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 подбирает и распознает импорт логгера в файле maven mom. Однако для всего импорта hunnysoft он сообщает: "Не удается разрешить символ" ByteString/Field/FieldBody ", BUT Build = > Compile" StackOverflowQuestion.java "скомпилирует все правильно, а созданный для этого класса unit test работает отлично ( хотя намерения также указывают на вызов create() как проблемной области.)

Итак, где-то IntelliJ игнорирует файл jmime.jar для подсистемы намерения. Я запутался, потому что зависимость log4j работает нормально, и все компилируется и работает нормально. F12 ( "Перейти к декларации" ) работает с импортом Logger, но ломает все импорт jmime.

О, еще одна вещь, если я перейду к представлению "Пакеты" в окне "Проекты", появится пакет "com.hunnysoft.jmime", и я могу увидеть ВСЕ классы, которые я импортировал в фрагменте кода выше "Библиотека". Удаление вышеуказанной зависимости из файла pom.xml заставляет этот пакет исчезать и компиляция прерывается.

Похоже, что путь класса проверки нарушен, но, похоже, для этого параметра настройки в настройках = > Намерения | Области компилятора (не то, что я ожидал каких-либо таких настроек, я считаю, что IDEA уже должен знать правильный путь к классам, основанный на файле pom и JDK).

В качестве заключительного эксперимента я создал совершенно новый стандартный прикладной проект J2SE (без использования maven) и добавил файл jmime.jar непосредственно в проект как одну из его библиотек. Я столкнулся с такими же проблемами, как описано выше в этом новом проекте.

Вот файл MANIFEST.MF из jmime файла jar.

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.

Я не вижу ничего необычного в этом файле jar.

Мое лучшее предположение заключается в том, что, возможно, проблема может быть проблемой отсутствия проблем. Но AFAIK jmime должен быть самодостаточным (JarAnalyzer ничего не придумает, но я не уверен, что это произойдет, если отсутствует байт зависимости).

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

Ответ 1

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

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

Ответ 2

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

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

Моя идея - 12.0.4

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

$ mvn -U idea:idea

Ответ 7

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

Ответ 8

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

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

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

Ответ 9

Опубликован ли опубликованный файл? Появляется проблема, первоначально затронутая v11/12 из-за "капитального ремонта компилятора" еще в 2013 году. Обсудив связанные с этим вопросы в Джире до конца 2014 года. http://youtrack.jetbrains.com/issue/IDEA-98425

Также на Jira IDEA-98425 отмечен фиксированный, но непроверенный (на v12.0.3). Ни одна из следующих обходной не помогла решить эту проблему "Невозможно устранить символ" с версией 13.1.1 в Windows

а. Удалить папку .IdealIC13 (тогда файл \Invalidate Caches/Restart)

б. Из окна Maven Projects,

b.1 mvn -U idea: idea → Выполнение этой цели maven предполагает перезагрузку зависимостей. Это работает, но с момента последнего FRI выполнение этой цели maven завершилось неудачно, поскольку он попытался перекомпилировать проект (конечно, он терпит неудачу как "Невозможно разрешить символы", что я пытаюсь исправить, выполнив эту команду в первую очередь) mvn -version - показывает версию maven, на которую ссылается 3.2.5, и что она работает

b.2 Просто щелкните проект правой кнопкой мыши и Reimport

b.3 Файл \ Недействительный кеш/перезапуск

с. Пробовал оба параметра Включить и отключить этот параметр: Файл → Настройки → Maven → Импорт → "Использовать maven3 для импорта проекта"

д. Настройки \Maven\Multiproject build fail policy = Fail at end (вместо Default)

Ничего не работает. Что происходит с поддержкой IntelliJ на Maven.

https://youtrack.jetbrains.com/issue/IDEA-99302

Из истории выпуска JetBeans https://www.jetbrains.com/company/history.jsp

IntelliJ v14 NOV 2014

IntelliJ v13 DEC 2013

Я бы предположил, что v12 зафиксирован (хотя непроверенный) будет включен в последующие выпуски. Любой, у кого есть аналогичные проблемы с версией IntelliJ? Пожалуйста, поделитесь своим опытом. Поддержка IntelliJ maven кажется сломанной.

Ответ 10

Моя структура проекта:

src -> main -> scala -> mypackages

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

Щелкните правой кнопкой мыши по папке scala и нажмите "Отметить каталог как источник корня".

Ответ 11

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

IntelliJ Версия: IntelliJ Idea 2018.1.5

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

Сначала перейдите к: File-> Настройки-> Сборка, выполнение, Deployment-> Сборка Tools-> Maven

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

После этого перейдите к: File-> Настройки-> Сборка, выполнение, Deployment-> Сборка Tools-> Maven-> Репозитории

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

Ответ 12

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

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

Ответ 13

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

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

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

Ответ 14

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

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

Ответ 15

Реимпорт проекта работал у меня. Щелкните правой кнопкой мыши по проекту → Maven → Reimport

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

Ответ 16

Иногда я просто открываю структуру проекта и выбираю проект, затем выбирает версию SDK.

Ответ 17

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

Затем я сделал:

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

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

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

Ответ 18

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

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

enter image description here

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

enter image description here

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

Ответ 19

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

Ответ 20

Для пользователей Intellij Idea эти команды еще до импорта проекта могут помочь:

./gradlew build . /gradlew idea

Ответ 21

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

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

Ответ 22

  • Откройте "Настройки"
  • Поиск "Maven"
  • Нажмите "Игнорируемые файлы" в разделе "Maven"
  • Снимите флажки с файлов pom.xml, содержащих недостающие зависимости
  • Нажмите "ОК"
  • Выберите "Файл" → "Недействительные кеши/перезапуск"...
  • Нажмите "Invalidate and Restart"

Ответ 23

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

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

Ответ 24

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

Тогда после a

mvn clean install -T 6 -DskipTests

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

Ответ 25

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

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

Ответ 26

иногда, когда вы создаете пакет, например com.mydomain.something, структура каталогов не создается, и вам остается одна папка с именем "com.mydomain.something", в этом случае вам следует создать структуру каталогов, например

com
|_mydomain
  |_something 

Ответ 27

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

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

Ответ 28

Если проект maven, то просто перейдите в настройки → инструменты сборки → maven → импорт. установите флажок "импортировать проект maven автоматически". решит проблему.

Ответ 29

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

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

1 - Строка меню - Рефакторинг | Создать | Выполнить | инструменты  - нажмите Создать, затем Перестроить проект

2 - MVN clean

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

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

Спасибо

Ответ 30

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