Інспекція IntelliJ дає "Неможливо вирішити символ", але все-таки компілює код


568

Платформа: 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-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 "", BUT Build => Compile 'StackOverflowQuestion.java' збирає все правильно, і тестовий блок, створений для цього класу, працює нормально (хоча наміри позначають заклик до створення () також як проблемної області.

Тож десь якось IntelliJ ігнорує файл jmime.jar для підсистеми намірів. Я розгублений, тому що залежність log4j працює добре, і все компілюється та працює нормально. F12 ("Перейти до декларації") працює на імпорті Logger, але переривається на весь імпорт jmime.

О, ще одна річ, якщо я перейду до перегляду «Пакети» у вікні «Проекти», з’явиться пакет «com.hunnysoft.jmime», і я можу побачити ВСІ класи, які я імпортував у фрагменті коду вище, під «Бібліотеки» . Видалення вищезазначеної залежності з файлу pom.xml призводить до зникнення цього пакету та компіляції.

Здається, що класифікаційний шлях інспекції порушений, але, схоже, немає налаштувань для цього в будь-якому місці в Налаштуваннях => Намір | Області компілятора (не те, що я очікував таких налаштувань, я вважаю, що IDEA вже повинна знати правильний клас курсу на основі файлу pom та JDK).

Як остаточний експеримент, я створив абсолютно новий стандартний проект програми J2SE (без використання maven) і додав файл jmime.jar безпосередньо до проекту як одну з його бібліотек. У мене виникають абсолютно ті самі проблеми, що описані вище в цьому новому проекті.

Ось MANIFEST.MF з файлу jar 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.

Я найкраще здогадуюсь, що, можливо, проблема може бути проблемою, що відсутня. Але jmaime AFAIK повинен бути самостійним (JarAnalyzer нічого не придумає, але я не впевнений, що це буде, якщо бляк залежностей відсутній).

Отже, у кого є якісь ІДЕА?


Дивіться також stackoverflow.com/questions/15046764/…, якщо він не може вирішити символи, що входять до складу Maven-залежностей [для мене це було відсутнім M2_HOME]
rogerdpack

1
2018.3.3. Ще та сама помилка ...
dieter

Відповіді:


998

Перш за все, ви повинні спробувати, File | Invalidate Cachesі якщо це не допоможе, видаліть системний каталог IDEA . Потім повторно імпортуйте проект Maven і подивіться, чи допомагає він.

У деяких дивних випадках складені класи можуть повідомляти про неправильну інформацію та плутати IDEA. Переконайтесь, що класи з цієї jar повідомляють правильні імена за допомогою javap .


1
Я видалив файли проекту, dirs, але це не було, поки недійсний кеш і перезапуск не виправили його. Дякую за пораду! Цікаво, чи немає способу зробити це автоматично. Ви б так подумали. Я маю на увазі, я навіть повністю імпортував проект з pom.xml, і він досі не "визнав недійсним" його кеші.
Антоні Стаббс

9
FWIW, ці виправлення не працювали для мене. У мене є проект maven, який має залежність від іншого проекту. Будівництво працює всередині і зовні IDEA 10.5, але деякі символи іншого проекту позначаються червоним кольором у залежному проекті. Недійсний кеш і перезапущено. Не вдалося. Також вилучили файли IDEA та повторно імпортували залежний проект. Не вдалося.
пастафаріан

10
Дякуємо за відповідь. Нарешті виявилося, що мені довелося сказати IDEA, щоб "імпортувати мій проект Maven за допомогою Maven 3". У розділі Налаштування-> Maven-> Імпорт. Виявлено після тривалого обміну електронною поштою з support@jetbrains.com.
пастафаріан

1
Опція меню тепер "Файл | Недійсний кеш / Перезапуск" (Android Studio 0.8.2, linux).
CoatedMoose

19
недійсний не працював незалежно від того, скільки разів я намагався. Я видалив папку .idea, а потім повторно імпортував проект із build.gradle. Це працює зараз.
HelpMatters

108

Наступний трюк вирішив цю проблему для мене:

  • Клацніть правою кнопкою миші на редакторі коду
  • Наведіть курсор на Maven і розгорніть
  • Клацніть на Reimport

Моя версія ідеї - 12.0.4


Як це зробити в IntelliJ для Mac OS?
Анкіт Рустагі

@AnkitRustagi for Mac OS клацніть правою кнопкою миші каталог проекту на панелі проектів. Мейвен -> Реімпорт. Ви також можете скористатися гарячою клавішею, подвійним перемиканням натискань або Shift + Command + A, а також шукати "повторно імпортувати всі проекти Maven"
Lakota Lefler

5
Клацніть правою кнопкою миші підказку для мене Мабуть, мій pom.xml не позначений як файл maven, тому мені потрібно клацнути правою кнопкою миші та позначено як Maven. Я ввімкнув "Імпортувати проекти Maven автоматично" та всі пакети, імпортовані після цього.
rasyadi

4
для 2017.1.x працює реімпортувати проекти Maven:, View -> Tool Windows -> Maven Projectsпотім натисніть на значок стрілок циклу.
Вієлінько

Повторний імпорт модуля Maven мені також допоміг, я був здивований, що він все-таки не повторно імпортується, оскільки залежності змінюються ...
Rich

37

Жодне з вищезазначених рішень не працювало для мене. Що було, було видалити файл main.iml вручну, і він раптом спрацював.


4
Велике спасибі! Це також було єдиним рішенням, яке вирішило моє питання. Що сталося, коли мій проект було перейменовано, і IntelliJ якось не очистив старі файли .iml під .idea / модулями. Видаліть цей зайвий .iml файл та відновіть проект, який вирішив проблему.
Чень

Працювали! Чудово! Але було б добре, якби хтось міг пояснити, чому це працює.
Hamza Belmellouki

1
Де той файл ?? Я видалив <projectname> .idl і тепер структура проекту відсутня !! крім того, налаштування не можна завантажити, оскільки файл IML не існує
KansaiRobot

Прекрасно працює. Я спробував змінити JDK, вимкнути кеші, проект реімпорту, нічого не вийшло. Видалення робіт main.iml.
rs_

31

Для користувачів Gradle:

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

Ви можете клацнути правою кнопкою миші на вашому файлі gradle на панелі "Project", щоб зробити це, але , схоже, це нічого не зробило для мене (я підозрюю помилку у своїй версії). Ви будете знати, якщо це станеться, тому що це не зможе запустити будь-які завдання IntelliJ, на які ви будете чекати. Замість цього відкрийте панель інструментів Gradle , потім натисніть кнопку синхронізації (оновлення). Це працювало для мене там, де недійсне кеш і перезапуск не робили.

Моя власна обставина: я використовував проект Scala разом з Gradle і повинен був це зробити.


Я просто хочу сказати як бічну зауваження, що мені потрібно було це зробити ще раз після рефакторингу моєї системи збирання; Якимось чином IntelliJ помітив деякі проблеми з моїм файлом build.gradle, який раніше не з’являвся. Зрештою, вдалося змусити це все вийти досить швидко.
bbarker

7
Панель інструментів Gradle знаходиться за адресою: View > Tool Windows > Gradle
UTF_or_Death

@bbarker - Я щойно оновив IntelliJ до останньої версії станом на неділю 6 серпня 2017 року. Проблема, яку ви згадуєте, де клацнути правою кнопкою миші файл build.gradle на панелі файлів проекту, і нічого ще не відбувається. На щастя, ваша порада використовувати кнопку "Оновити" у вікні інструменту Gradle (Перегляд -> Інструмент Windows -> Gradle) чудово працювала.
Роберт Ошлер

На замітці проблем build.gradle: Іноді IntelliJ знаходить неіснуючі проблеми, якщо у вас немає конфігурацій запуску. У мене колись були якісь дивні, mavenCentral() could not be resolvedпоки я не додав конфігурації jUnit назад (я переніс весь проект Gradle, створивши новий проект Gradle, потім скопіювавши всі вихідні файли).
Єгор Ганс

28

Про це було сказано в іншій відповіді на це ж запитання тут , але це лише для мене виправляє це. Я будую всі свої побудови в окремому терміналі, поза IntelliJ. Отже, кеш повинен мати належні дозволи для програми IntelliJ для їх читання.

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

$ mvn -U idea:idea

Я думаю, що це може допомогти ... але незручно працює це дає час на вихід. не вдалося підключитися до repo :(
KansaiRobot

ти врятував мій (другу половину) день!
Гавриель

19

Ще один крок, коли я зробив Файл -> Недійсний кеш і перезапустив IDE, відкрив проект. Він з'явився тост-бокс у верхньому правому куті, запитуючи мене, чи ввімкнути автоматичний імпорт і це вирішило проблему.


14

Ще одна річ, що потрібно перевірити: переконайтеся, що залежності не дублюються. У моєму випадку я виявив, що модуль, що демонструє таку поведінку, був неправильно налаштований так: він мав залежність від іншого модуля і залежність від баночки, виробленої цим іншим модулем. Це означало для кожного символу, на який посилався у двох примірниках, і було неоднозначним.


11

Невідповідні / дублюючі назви модулів у структурі проекту викликали цю проблему для мене.

  1. Йти до File -> Project Strucutre -> Modules
  2. Клацніть на модулі, які мають підкреслений червоний колір
  3. Перейшов на вкладку "Залежності"
  4. Переконайтеся, що червоні залежності існують у списку залежностей. Якщо ні, перейменуйте їх, щоб вони відповідали існуючим іменам залежностей

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


1
Нарешті. У мене чомусь були перераховані два модулі, "головний" та назва мого проекту. Видалено основне, і помилки відійшли.
Боббі

9

Чи було опубліковано виправлення? З'являється випуск, спочатку зачеплений v11 / 12 через "капітальний ремонт компілятора" ще у 2013 році. Обговорення відповідних питань у Джирі до кінця 2014 року. Http://youtrack.jetbrains.com/issue/IDEA-98425

Також на Jira IDEA-98425 було позначено фіксованим, але неперевіреним (на v12.0.3). Жодна з наведених нижче ситуацій не допомогла вирішити цю проблему "Не вдається вирішити символ" з версією 13.1.1 для Windows

а. Видалити папку .IdealIC13 (Потім, файл \ недійсний кеш / перезапуск)

б. У вікні Maven Projects ,

b.1 mvn -U ідея: ідея -〉 Виконання цієї основної мети припустимо перезавантажити залежності. Це працює попередньо, але, оскільки минулого FRI, виконання цієї мети Maven не вдалося, оскільки вона намагалася перекомпілювати проект (Звичайно, він не вдається як "Неможливо вирішити символи", це те, що я намагаюся виправити, виконуючи цю команду в першу чергу) mvn -version - показує версію maven з посиланням 3.2.5 і що вона працює

b.2 Просто натисніть проект правою кнопкою миші та повторно імпортуйте

b.3 Файл \ Недійсний кеш / Перезапуск

c. Спробували обидва Увімкнути та вимкнути цей параметр: Файл -> Налаштування -> Maven -> Імпорт -> "Використовувати maven3 для імпорту проекту"

г. Налаштування \ Maven \ Multiproject build fail policy = Невдача в кінці (замість за замовчуванням)

Нічого не працює. Що відбувається з підтримкою 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 здається порушеною.


Проблема зникла ... після того, як я "Відкрив" проект замість проекту "Імпорт" ... чорт дивно.

Це працювало для мене! :) Втратили день роботи, але це спрацювало. Цікаво, чим відрізняється відкритий та імпортний
Арран

5

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

src -> main -> scala -> mypackages

Що працювало:

Клацніть правою кнопкою миші на scalaпапці та натисніть «Позначити каталог як джерело корінь».


4

Ніхто з інших не відповідав мені. Мій імпорт не вирішено, оскільки IntelliJ вказав на неправильний файл .m2.

Версія IntelliJ: IntelliJ Idea 2018.1.5

Моє місцезнаходження для каталогу .m2 було вказано на неправильний шлях. Все, що я зробив, щоб виправити це, було перенаправити IntelliJ праворуч на каталог .m2 та оновити його.

Спочатку перейдіть до: Файл-> Налаштування-> Збірка, Виконання, Розгортання-> Інструменти побудови-> Maven

Мені довелося змінити файл налаштувань користувача: і локальний сховище: на правильне розташування мого каталогу .m2.

Після цього перейдіть до: Файл-> Налаштування-> Збірка, виконання, розгортання-> Інструменти збирання-> Maven-> Репозиторії

і натисніть кнопку Оновити.


3

Для іншої альтернативи.

Цю проблему я також отримав, коли використовував JDK7_07. Тут я спробував усі відповіді (крім видалення системного каталогу IDEA). Але, у мене все-таки проблема. Отже, що я це зробив:

Встановіть найновіший JDK (це був JDK7_45) і встановіть JDK Intellij на новий, і він працює.


Якщо виникла проблема з Intellij IDEA 2019.3 та пакетів JDK 11.0.3 та вирішили її, встановивши JDK 11.0.4 вручну, дивіться тут: stackoverflow.com/questions/61338200/…
Бенджамін Зак

3

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

Зауважте, що я здогадуюсь, що початкова проблема була викликана чимось на кшталт javathings.blogspot.com/2009/11/too-many-open-files-in-intellij-idea.html(Примітка: станом на 2018 рік, це посилання є мертвим, але в архіві.org є копія сторінки звідти, коли ця відповідь була вперше написана.) Або Проблема з дисковим простором / пам'яттю, що спричиняє збій Java. IntelliJ, здавалося, просто зіпсувався.


3

Якщо ваш проект Maven - це багатомодульний проект, перевірте, чи не ігнорується Intellij деякі з модулів.

  1. Клацніть Перегляд -> Інструмент Windows -> Maven Projects і перевірте, чи не ігноруються деякі модулі (Проігноровані модулі сірого кольору, наприклад, gs-multi-moduleна наступному зображенні).

введіть тут опис зображення

  1. Клацніть правою кнопкою миші на ігнорованому модулі та виберіть Unignore Projects.

введіть тут опис зображення

Потім зачекайте, коли Intellij закінчить індексацію, після чого вона запрацює.


2

Після вимкнення кеша і перезавантаження; і підтвердження моїх параметрів Maven було нормально, я все ще бачив "Неможливо вирішити символ" для модуля, який я напевно встановив як залежність. Виявляється, у мене це було встановлено неправильно.

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


2

Повторний імпорт проекту працював на мене. Клацніть правою кнопкою миші на Project -> Maven -> Reimport

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



2

У моєму випадку я намагаюся відкрити проект весняного завантаження від IntellijIdea таку саму проблему, що й неможливо імпортувати всі файли, пов’язані з весною.

Тоді я зробив:

Файл -> Закрити проект -> Імпортувати проект -> Імпортувати із зовнішньої моделі -> Оберіть Gradle -> Далі -> Виберіть проект із розташування файлу -> Завершити

Зараз все працює нормально, як очікувалося.

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


1

Так, це здається, що вам потрібно створити бібліотеки, що містять потрібні вами JAR, та додати їх як залежність у вашому модулі.


1

У моєму випадку видаляється лише buildDir. У цьому випадку File | Invalidate Cachesне працює.

Коли я роблю Build | Make Projectраніше File | Invalidate Caches, все працює добре.


він кинув помилку: версія випуску помилки Java 5 не підтримується
KansaiRobot

@KansaiRobot Здається, що у вашому проекті налаштовано використовувати Java 5. Більшість бібліотек в даний час потребує принаймні Java 8, і не так багато причин використовувати щось нижче (у JDK було багато справ, що стосується нових функцій та продуктивності) , тому спробуйте ще раз з Java 8 або новішою версією.
Єгор Ганс

1
  1. Відкрийте "Налаштування"
  2. Шукати "Maven"
  3. Клацніть на "Проігноровані файли" під "Maven"
  4. Зніміть прапорець у файлах pom.xml містяться відсутні залежності
  5. Натисніть "ОК"
  6. Клацніть Файл -> Недійсний кеш / Перезапуск ...
  7. Натисніть "Недійсний та перезапустіть"

на екрані немає pom.xml у 4,
KansaiRobot

1

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

Моє рішення полягало в тому, щоб перемістити все до типового пакету, видалити com.foo.barпакунок, потім створити його знову і перемістити все назад.


1

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

Потім після a

mvn clean install -T 6 -DskipTests

в консолі IntelliJ знову зрадів. Не знаю, як проекти ігнорувались ...


1

mvn idea:ideaпрацював на мене. Знайшов його тут . Витратив більше години, сподіваюся, що хтось допоможе


1

Видаліть: iml-файл, знайдений у Java та тестові папки всередині проекту, а також визнайте недійсним та перезапустіть.

Він запитає, чи можу я видалити проекти. Покладіть так. Помилка згасне.


1

Для мене працювало те, щоб "Позначити як корінь джерела каталогів" каталог, у якому знаходився червоний клас, після цього червоний знак зник. Здається, це чомусь було без позначки.


1

Для проектів 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

0

якщо проект Maven тоді просто перейдіть до налаштувань -> інструменти побудови -> maven -> імпорт. встановіть прапорець "Імпортувати проект Maven автоматично". вирішить проблему.


0

Недійсні кеші працювали на мене, але після запуску програми сталася та сама помилка.

Тому я спробував ( Intellij ):

1 - Рядок меню - Refactor | Побудувати | Виконати | Інструменти - натисніть " Створити", а потім " Відновити проект"

2 - MVN чистий

3 - Клацніть правою кнопкою миші на проект> Maven> Створити джерела та оновити папку

Сподіваюся, це працює для вас.

Дякую


0

Або, можливо, файл, який ви імпортуєте, занадто великий. Це мій випадок, коли я змінюю властивість Intellij: iead.max.intellisen.filesize (шлях дорівнює $ {idea dir} /bin/idea.properties) на більшу величину, наприклад 25000 та перезавантажте IDE, проблема зникла. Сподіваюсь, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.