Платформа: 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-файл зависимости).
Так, у кого-нибудь есть ИДЕИ?