it-swarm.com.ru

Проверка 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-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-файл зависимости).

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

443
Kevin Sitze

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

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

803
CrazyCoder

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

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

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

87
rshahriar

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

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

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

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

24
bbarker

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

19
Matthew Chen

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

18
cerisier

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

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

$ mvn -U idea:idea
13
Tom

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

11
Landon Kuhn

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

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

а. Удалить папку .IdealIC13 (затем Файл\Неправильный кэш/Перезапуск)

б. Из окна Maven Projects

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

б.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 (хотя unverified) будет включен в последующие выпуски. У кого-то есть похожие проблемы с какой версией IntelliJ? Пожалуйста, поделитесь своим опытом. Поддержка IntelliJ maven кажется сломанной.

8
user3761555

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

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

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

8
Babken Vardanyan

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

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

3
mozboz

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

src -> main -> scala -> mypackages

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

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

3
axiom

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

IntelliJ Версия: IntelliJ Idea 2018.1.5

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

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

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

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

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

3
Tim

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

2
Arthur Wu

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

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

 enter image description here

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

 enter image description here

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

2
Searene

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

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

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

2
ismailsunni

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

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

2
Sandeep

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

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

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

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

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

2
Shylendra Madda

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

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

2
user3565334

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

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

1
chiguri

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

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

1
jmhage
  1. Открыть настройки"
  2. Поиск "Maven"
  3. Нажмите «Игнорируемые файлы» в разделе «Maven»
  4. Снимите отметку с файлов pom.xml, которые содержат отсутствующие зависимости
  5. Нажмите "ОК"
  6. Нажмите Файл -> Недействительные кэши/Перезапустить ...
  7. Нажмите «Отменить и перезагрузить»
1
Koning

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

com
|_mydomain
  |_something 
1
test0101

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

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

1
Harriesh Gomahan

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

Потом после

mvn clean install -T 6 -DskipTests

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

1
Ronald Teune

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

./gradlew build ./идея gradlew

1
Ivan Aracki

Для 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
1
Eric

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

1
duffymo

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

Поэтому я попытался ( Intellij ): 

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

2 - МВН чистый

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

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

Спасибо

0
Djalas

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

0
nilesh

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

0
DarkAngeL

 check import Maven projects automatically, fixed my issue

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

0
user3651854

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

0
Bechyňák Petr

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

Отменить кеш и перезапустить у меня не получилось . Что сработало:

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

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

0
Johnny Martin

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

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

0
Hari Krishnan

Для MAVEN,

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

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

  1. мвн чистый

  2. мвн идея: чистая

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

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

0
Aakash Parashar

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

  1. Прочтите, как использовать Maven в IntelliJ в последнее время
  2. Убедитесь, что IntelliJ настроен на использование Bundled Maven 3
  3. Найти и ПРЕКРАТИТЬ фактический процесс Java, который выполняет индексирование репозиториев Maven 3 для IntelliJ (Прекращение может быть выполнено во время работы IntelliJ). В случае, если какие-либо проблемы с индексами или зависимостями отсутствуют (продуманные репозитории были настроены в pom.xml).
  4. Принудительное Обновление для всех репозиториев в "IntelliJ/Настройки/Инструменты сборки/Maven/Репозитории /". Занимает большую часть времени, места на диске и пропускной способности! Мне потребовалось 20+ минут, чтобы обновить индекс для центрального репозитория Maven.
  5. Нажмите «Повторно импортировать весь проект Maven» еще раз из IntelliJ.
  6. Рекомендуется выполнить шаги 1-4, чтобы IntelliJ и его демонические Java-процессы работали в течение ночи, если у вас есть несколько репозиториев и сложный проект, поэтому у вас все синхронизировано на следующий день. Теоретически вы можете использовать все популярные индексированные репозитории и запускать обновление индексов для всех репо в одно и то же время (я полагаю, IntelliJ создает очередь и запускает обновления один за другим), тогда для завершения могут потребоваться часы (вы будете для этого тоже нужно увеличить пространство кучи).

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

0
Constantin Zagorsky

«File -> Invalidate Cache and Restart» разрешит все зависимости.

0
Kishore Bhosale

Предложение номер один об Invalidate Caches/Restart ... не сработало для меня, как и другие решения. В итоге мои репозитории maven были настроены неправильно, я исправил это, вручную переопределив settings.xml и каталог репозитория:

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

Затем для Файл настроек пользователя и Локальный репозиторий , проверьте Переопределить и укажите его на правильный файл settings.xml и каталог репозитория.

0
Richard Vu

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

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

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

0
Ben

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

0
Arvand

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

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

0
nolazem

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

0
Chaojun Zhong

Возникли проблемы при импорте стандартных библиотек Java, таких как Java.beans. *

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

Файл-> ProjectStructure-> SDKs-> 1.8 Изменен «домашний путь JDK»: на /usr/lib/jvm/Java-1.8.0-openjdk-1.8.0161-2.b14.el7.x86_64 вместо/USR/Библиотека/JVM/Java-1.8.0-OpenJDK-1.8.0161-2.b14.el7_4.x86_64

Прежний путь к jdk (с разницей _4 в пути) почти ничего не имел. Не хватало многих библиотек Java.

0
mastash3ff

Похоже, это случается со мной, в основном, когда баночка зависимостей также является толстой банкой. К счастью, у меня был контроль над постройкой "Жирной банки", после того, как я сделал ее не "Жирной банкой", тогда все заработало. Ни одно из других исправлений ни одного из ответов или комментариев здесь не сработало для меня. Также, вероятно, следует отметить, что мой код был на Kotlin, а Fat Jar также связывал некоторые Kotlin-зависимости.

0
Piacenti