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

417

Платформа: 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?

  • 0
    См. Также stackoverflow.com/questions/15046764/… если он не может разрешить символы, которые являются частью зависимостей maven [для меня это был отсутствующий M2_HOME]
  • 0
    2018.3.3. Все та же ошибка ...
Теги:
maven
intellij-idea

44 ответа

772
Лучший ответ

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

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

  • 1
    Я удалил файлы проекта, dirs, но это было до тех пор, пока кеш недействительных данных и перезагрузка не исправили это. Спасибо за чаевые! Интересно, нет ли способа сделать это автоматически. Вы бы так подумали. Я имею в виду, что я даже полностью повторно импортировал проект из pom.xml, и он все еще не «аннулировал» его кеши.
  • 2
    Я добавил проблему: youtrack.jetbrains.com/issue/IDEA-98779
Показать ещё 30 комментариев
81

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

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

Моя идея - 12.0.4

  • 0
    Как мне сделать это в IntelliJ для Mac OS?
  • 0
    @AnkitRustagi для Mac OS щелкните правой кнопкой мыши каталог проекта под панелью проекта. Maven -> Reimport. Вы также можете использовать горячую клавишу, двойное нажатие клавиши Shift + Command + A и выполнить поиск «реимпортировать все проекты Maven».
Показать ещё 4 комментария
22

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

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

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

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

  • 0
    Я просто хочу отметить, что мне нужно было сделать это снова после небольшого рефакторинга моей системы сборки; каким-то образом IntelliJ обнаружил некоторые проблемы с моим файлом build.gradle, которые раньше не появлялись. В итоге удалось заставить все это отработать довольно быстро.
  • 7
    Панель инструментов Gradle находится по адресу: View > Tool Windows > Gradle
Показать ещё 2 комментария
18

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

14

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

  • 4
    Большое спасибо, это было единственное решение, которое решило проблему и для меня!
  • 0
    Большое спасибо! Это также было единственным решением, которое решило проблему, с которой я столкнулся. Произошло то, что мой проект был переименован, и IntelliJ почему-то не удалил старые файлы .iml в .idea / modules. Удалите эти лишние файлы .iml и пересоберите проект, исправив проблему.
Показать ещё 1 комментарий
10

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

9

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

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

$ mvn -U idea:idea
  • 0
    Запуск этой команды работал для меня, спасибо!
8

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

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

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

  • 1
    В заключение. По какой-то причине в моем списке было два модуля: «основной» и название моего проекта. Убрал основной, и ошибки ушли.
  • 0
    @ Бобби, это тоже была моя проблема. Спасибо, что поделился!
8

Опубликован ли опубликованный файл? Появляется проблема, первоначально затронутая 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 кажется сломанной.

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

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

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

2

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

IntelliJ Версия: IntelliJ Idea 2018.1.5

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

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

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

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

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

2

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

2

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

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

2

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

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

2

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

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

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

1

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

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

Изображение 1532

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

Изображение 1533

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

  • 0
    Я не знаю, почему за этот ответ не проголосовали ни разу до сих пор. Это тот, который работал для меня. Большое спасибо, @ Searene.
1

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

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

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

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

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

1

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

com
|_mydomain
  |_something 
1

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

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

1

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

Тогда после a

mvn clean install -T 6 -DskipTests

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

1

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

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

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

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

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

1

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

src -> main -> scala -> mypackages

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

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

1

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

./gradlew build . /gradlew idea

1

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

0

Изображение 1534

проверьте импорт проектов Maven автоматически, исправил мою проблему. Я провел два часа, выясняя, где я делаю неправильно. Наконец удалось это исправить.

0

Для MAVEN,

Я пробовал все вышеперечисленные методы, но не смог найти решение,

Ниже приведены шаги, которые я пробовал (сочетание некоторых решений),

  1. mvn clean

  2. Идея mvn: чистая

  3. Недействительный кеш и перезагрузка
  4. Удалите все дополнительные.iml файлы, которые вы видите в структуре проекта.
  5. В корневой директории вашего проекта запустите mvn idea: idea и mvn clean install, чтобы переименовать все зависимости вашего проекта maven.

(Убедитесь, что у вас нет дополнительных файлов.iml, кроме файлов проекта/подпроектов.iml)

0

Если все мои файлы pom.xml настроены правильно, и у меня все еще есть проблемы с Maven в IntelliJ, я делаю следующие шаги

  1. Узнайте, как использовать maven в IntelliJ в последнее время
  2. Убедитесь, что IntelliJ настроен на использование Bundled Maven 3
  3. Найти и TERMINATE фактический процесс java, который выполняет индексирование репозиториев Maven 3 для IntelliJ (завершение может выполняться во время работы IntelliJ). В случае, если какие-либо проблемы с индексами или зависимостями недоступны (мыслительные репозитории были настроены в pom.xml).
  4. Принудительное обновление для всех репозиториев в "IntelliJ/Settings/Build Tools/Maven/Repositories/". Большую часть времени занимает дисковое пространство и пропускная способность! Мне потребовалось 20+ минут для обновления индекса для центрального репо Maven.
  5. Хит снова импортирует все проекты Maven из IntelliJ
  6. Рекомендуется выполнить шаги 1-4, чтобы оставить IntelliJ и его демонические java-процессы запущенными за ночь, если у вас несколько репозиториев и сложный проект, поэтому на следующий день у вас есть синхронизация. Вы можете теоретически использовать все популярные индексированные репозитории и запускать обновление индекса для всех репозиториев одновременно (я полагаю, IntelliJ создает очередь и запускает обновления один за другим), тогда это может занять несколько часов (вам нужно увеличить кучу пространство для этого тоже).

PS Я потратил много времени, чтобы понять (шаг 3), что процесс демона IntelliJ java, который обрабатывает обновление индекса maven, делает что-то неправильно, и мне просто нужно сделать IntelliJ, чтобы начать его с нуля. Проблема была решена без перезапуска самого IntelliJ.

0

Не удалось импортировать стандартные java-библиотеки, такие как java.beans. *

Исправлено это на моей системе Redhat 7, указав ее на правильный путь JRE.

File-> ProjectStructure → SDKs-> 1.8 Изменен "домашний путь JDK:" на /usr/lib/jvm/java-1.8.0-openjdk-1.8.0161-2.b14.el7.x86_64 вместо /usr/lib/jvm/java-1.8.0-openjdk-1.8.0161-2.b14.el7_4.x86_64

Первый путь к jdk (с разницей в пути 4) вряд ли имел в этом что-то. В нем отсутствовало много java-библиотек.

0

Перейдите в File-> Структура проекта → SDK и проверьте правильность пути к файлу SDK.

0

Что помогло мне решить эту проблему:

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

0

Для меня работала "Mark as directory source root" - каталог, в котором был отмечен красный класс, после чего красная метка исчезла. Похоже, что по какой-то причине это было немаркировано.

0

"Файл → Недействительный кэш и перезагрузка" разрешит все зависимости.

0

Если ничего не получается, щелкните правой кнопкой мыши на исходном каталоге, пометьте каталог как "Source Directory", а затем щелкните правой кнопкой мыши по каталогу проекта и maven → re-import.

это решило мою проблему.

0

Внесите изменения в файл app.gradle(просто нажмите там место), затем нажмите "Синхронизировать", затем "Очистить". Работает каждый раз:)

0

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

0

Для Idea 2017.1 + Gradle плагин как-то глючит. Пробовал все синхронизировать, invalidate + restart, ничего не работало. Согласно https://github.com/gradle/gradle/issues/2315, это сработало для меня: 1. Закрыть идею 2. Введите идею gradle в командной строке (должно сгенерировать 3 файла:.iml,.ipr,.iws) 3. Запустите идею и откройте созданный файл .ipr, это должно импортировать проект с нуля, с жестко связанными зависимостями в этих трех файлах

  • 0
    Однако это скорее временное решение. Я только что установил 2017.2.1 и теперь проблема исчезла.
0

Это решило мою проблему: щелкните правой кнопкой мыши файл jar в дереве файлов в AS и выберите "Добавить как библиотеку..."

РЕДАКТИРОВАТЬ: вы можете сделать "Файл" → "Недействительные кеши..." и выбрать опцию "Invalidate and Restart", чтобы исправить это.

0

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

Я скопировал все файлы IDEA (даже связанные с ними% APPDATA% -folders), но затем сборка Maven была успешно выполнена, но при ее создании IDEA не обнаружила никаких классов из зависимостей.

Решение: я начал с нового и чистого профиля IDEA, удалив папки из% APPDATA% -folders

0

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

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

  • возврат изменений, которые я сделал до большой проверки структуры структуры
  • реимпорт всех модулей maven
0

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

0

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

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

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

2 - MVN clean

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

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

Спасибо

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню