Проверка IntelliJ выдает «Не удается разрешить символ», но все равно компилирует код - PullRequest
490 голосов
/ 06 мая 2011

Платформа: 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 => 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 подхватывает и распознает импорт 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 из файла 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 ничего не предлагает, но я не уверен, что так будет, если отсутствует jar-файл зависимости).

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

Ответы [ 45 ]

858 голосов
/ 06 мая 2011

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

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

97 голосов
/ 09 апреля 2013

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

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

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

27 голосов
/ 01 сентября 2016

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

25 голосов
/ 03 июля 2015

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

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

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

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

19 голосов
/ 01 декабря 2016

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

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

$ mvn -U idea:idea
19 голосов
/ 29 ноября 2012

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

13 голосов
/ 06 апреля 2012

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

9 голосов
/ 29 декабря 2015

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

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

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

8 голосов
/ 03 мая 2015

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

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

а. Удалить папку .IdealIC13 (затем File \ 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 \ Политика сбоя многопроектной сборки = Ошибка в конце (вместо значения по умолчанию)

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

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

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

IntelliJ v14 ноябрь 2014

IntelliJ v13 DEC 2013

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

4 голосов
/ 21 июня 2018

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

Версия IntelliJ: IntelliJ Idea 2018.1.5

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

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

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

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

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

...