IntelliJ inspection gives "Cannot resolve symbol" but still compiles code
Проверка IntelliJ выдает "Не удается разрешить символ", но все равно компилирует код
Платформа: IntelliJ Community Edition 10.0.3 SDK: jdk1.6.0_21 ОС: Windows 7
Итак, у меня странная ситуация с IntelliJ, которая полностью ставит меня в тупик. Я настраиваю проект Maven и добавляю log4j в качестве зависимости в файл pom.xml. Проверки IDEA выполняются нормально, и все мои модульные тесты компилируются и запускаются.
Затем я добавил библиотеку jmime от hunnysoft в свой локальный репозиторий maven, используя mvn install:install-файл следующим образом.
Maven просто отлично установил файл jar в мой локальный репозиторий.
Затем я зашел в Настройки IntelliJ => Maven => Службы репозитория и обновил свой локальный репозиторий (чтобы IntelliJ переиндексировал содержимое репозитория).
Наконец, я добавил следующую зависимость в свой файл pom.xml (чуть выше зависимости log4j).
publicclassStackOverflowQuestion { public Field create(String name, String text) { Logger.getLogger(getClass()).debug("create entered"); FieldBodybody=newFieldBody(); body.setText(newByteString(text)); Fieldfield=newField(); field.setFieldName(name); field.setFieldBody(body); return field; } }
Теперь о странностях. Механизм intention IntelliJ распознает импорт Logger в pom-файле maven просто отлично. Однако для всего импорта hunnysoft он сообщает: "Не удается разрешить symbol 'ByteString /Field / FieldBody'", НО Build => Compile 'StackOverflowQuestion.java' компилирует все правильно, и модульный тест, который я создал для этого класса, выполняется нормально (хотя намерения также помечают вызов create () как проблемную область).
Итак, где-то, каким-то образом IntelliJ игнорирует jmime.jar файл для подсистемы intention . Я в замешательстве, потому что зависимость log4j работает нормально, и все компилируется и запускается нормально. F12 ("Перейти к объявлению") работает при импорте Logger, но прерывается при всем импорте jmime.
О, еще одна вещь, если я перейду к представлению "Пакеты" в окне "Проекты", появится пакет "com.hunnysoft.jmime", и я смогу увидеть ВСЕ классы, которые я импортировал из фрагмента кода выше в разделе "Библиотеки". Удаление вышеупомянутой зависимости из файла pom.xml приводит к исчезновению этого пакета и прерыванию компиляции.
Похоже, что путь к классу проверки нарушен, но, похоже, нигде в областях Settings => Intentions | Compiler для этого нет настройки (не то чтобы я ожидал каких-либо таких настроек, я считаю, что IDEA уже должна знать правильный путь к классу на основе файла pom и JDK).
В качестве последнего эксперимента я создал совершенно новый стандартный проект приложения J2SE (без использования maven) и добавил файл jmime.jar непосредственно в проект в качестве одной из его библиотек. В этом новом проекте я сталкиваюсь с точно такими же проблемами, как описано выше.
Мое лучшее предположение заключается в том, что, возможно, проблема может заключаться в отсутствующей зависимости. Но AFAIK jmime должен быть автономным (JarAnalyzer ничего не выдает, но я не уверен, что это произойдет, если jar зависимостей отсутствует).
Итак, у кого-нибудь есть какие-нибудь идеи?
Переведено автоматически
Ответ 1
Прежде всего, вы должны попробовать File | Invalidate Caches и, если это не поможет, удалить системный каталог IDEA. Затем повторно импортируйте проект Maven и посмотрите, поможет ли это.
В некоторых странных случаях скомпилированные классы могут сообщать неверную информацию и сбивать с толку ИДЕЮ. Убедитесь, что классы из этого jar сообщают правильные имена, используя javap.
Ответ 2
Следующий трюк решил эту проблему для меня:
Щелкните правой кнопкой мыши в редакторе кода
Наведите курсор на Maven и разверните
Нажмите на повторный импорт
Моя версия idea - 12.0.4
Ответ 3
Ни одно из вышеперечисленных решений у меня не сработало. Что я сделал, так это удалил main.iml файл вручную, и он внезапно заработал.
Ответ 4
Это упоминалось в другом ответе на этот же вопрос здесь, но только это исправляет проблему для меня. Я делаю все свои сборки в отдельном терминале, за пределами IntelliJ. Поэтому для приложения IntelliJ в кэше должны быть установлены соответствующие разрешения для их чтения.