Проверка 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 ]

4 голосов
/ 23 ноября 2015

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

src -> main -> scala -> mypackages

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

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

3 голосов
/ 10 сентября 2011

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

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

2 голосов
/ 18 апреля 2017

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

2 голосов
/ 23 апреля 2014

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

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

2 голосов
/ 26 ноября 2013

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

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

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

2 голосов
/ 20 сентября 2018

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

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

enter image description here

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

enter image description here

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

2 голосов
/ 10 марта 2015

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

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

2 голосов
/ 17 мая 2018

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

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

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

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

1 голос
/ 22 октября 2015

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

. / Gradlew build . / gradlew idea

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

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

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

...