Проверка IntelliJ дает "не может разрешить символ" , но все же компилирует код

Платформа: IntelliJ Community Edition 10.0.3
SDK: jdk1.6.0_21
ОС: Windows 7

Итак, у меня странная ситуация с IntelliJ, которая меня полностью в тупик. Я настраиваю проект Maven и добавляю log4j в качестве зависимости в pom.XML-файл. Проверки идей работают нормально, и все мои модульные тесты компилируются и запускаются.

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

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

о, еще одна вещь, если я перейду к представлению "пакеты" в окне "проекты "" com.ханнисофт.появляется пакет "jmime", и я вижу все классы, которые я импортировал в фрагменте кода выше в разделе"библиотеки". Удаление выше зависимость от пом.xml-файл приводит к исчезновению этого пакета и разрывам компиляции.

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

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

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

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

30 ответов


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

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


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

  • Правой Кнопкой Мыши на редакторе кода
  • наведите курсор на Maven и разверните
  • нажмите на реимпорт

моя версия идеи-12.0.4


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

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

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

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


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


ни одно из вышеперечисленных решений не сработало для меня. Зачем было извлекать главное.iml файл вручную, и он внезапно сработал.


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


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

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

$ mvn -U idea:idea

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

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

a. Удалить .IdealIC13 папка (затем File \ Invalidate Caches / Restart)

b. От Maven-Проекты,

б.1 mvn-U идея: идея –〉выполнение этой цели maven предполагает перезагрузку зависимостей. Это работает prev, но с прошлого ПТ, выполнение этой цели maven не удалось, поскольку она пыталась перекомпилировать проект (конечно, это не удается как "невозможно разрешить символы", это то, что я пытаюсь исправить, запустив эту команду в первую очередь) mvn-version - показывает версию maven, на которую ссылается 3.2.5, и что она работает

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

б.3 \ файл Аннулировать Кэш / Перезапуск

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

d. Settings \ Maven \ Multiproject build fail policy = сбой в конце (вместо По умолчанию)

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

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

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

IntelliJ v14 ноября 2014 года

IntelliJ v13 DEC

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


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

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

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


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

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


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

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

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


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

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


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

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


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


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


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

./ gradlew build ./идеи gradlew


Моя Структура Проекта:

src -> main -> scala -> mypackages

что получилось:

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


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

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


  1. Открыть "Параметры"
  2. Поиск "Maven"
  3. нажмите "игнорируемые файлы" в разделе "Maven"
  4. снимите флажок pom.xml-файлы содержат отсутствующие зависимости
  5. нажмите "OK"
  6. Нажмите File - > Invalidate Caches / Restart...
  7. нажмите "аннулировать и перезапустить"

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

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


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

после

mvn clean install -T 6 -DskipTests

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


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

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


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

com
|_mydomain
  |_something 

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

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

File - > Close Project - > Import Project - > Import from external model - > выберите Gradle - > Next - > выберите проект из расположения файла - > Finish

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

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


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

Версия IntelliJ:IntelliJ Idea 2018.1.5

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

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

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

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

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


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

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

enter image description here

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

enter image description here

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


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


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

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

1-строка меню-рефакторинг/построить | Выполнения | Инструменты - нажмите построить затем Перестроить Проект

2 - MVN чистый

3-щелкните правой кнопкой мыши на project > Maven > Generate Sources and Update Folder

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

спасибо


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


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

аннулирование кэша и перезапуск не сработали для меня. Что сработало:

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