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

0 голосов
/ 13 сентября 2016

Invalidate Cache у меня работал, но после запуска приложения возникла та же ошибка.

Итак, я попытался ( Intellij ):

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

2 - MVN clean

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

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

Спасибо

0 голосов
/ 24 мая 2019

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

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

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

0 голосов
/ 11 апреля 2018

Возникли проблемы при импорте стандартных библиотек 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 голосов
/ 03 августа 2017

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

0 голосов
/ 05 января 2018

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

0 голосов
/ 05 января 2018

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

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

0 голосов
/ 18 декабря 2017

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

0 голосов
/ 20 октября 2017

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

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

0 голосов
/ 14 сентября 2017

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

0 голосов
/ 23 сентября 2018

check  import Maven projects automatically, fixed my issue

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

...