Platforma: IntelliJ Community Edition 10.0.3
SDK: jdk1.6.0_21
System operacyjny: Windows 7
Mam więc dziwną sytuację z IntelliJem, która całkowicie mnie zaskoczyła. Konfiguruję projekt Maven i dodam log4j jako zależność w pliku pom.xml. Inspekcje IDEA przebiegają dobrze, a moje testy jednostkowe wszystkie się kompilują i uruchamiają.
Następnie dodałem bibliotekę jmime hunnysoft do mojego lokalnego repozytorium maven, używając pliku instalacyjnego mvn w następujący sposób.
mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \
-DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar
Maven dobrze zainstalował plik jar w moim lokalnym repozytorium.
Następnie przeszedłem do ustawień IntelliJ => Maven => Usługi repozytorium i zaktualizowałem moje lokalne repozytorium (aby IntelliJ ponownie indeksował zawartość repozytorium).
Na koniec dodałem następującą zależność do mojego pliku pom.xml (nieco powyżej zależności log4j).
<dependency>
<groupId>jmime</groupId>
<artifactId>jmime</artifactId>
<version>3.1.1e</version>
</dependency>
Teraz tworzę nową klasę w następujący sposób:
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;
}
}
Teraz dziwność. Mechanizm intencji IntelliJ podnosi i rozpoznaje import Logger w pliku maven pom. Jednak dla wszystkich importów hunnysoft zgłasza: „Nie można rozwiązać symbolu„ ByteString / Field / FieldBody ””, ALE Build => Compile „StackOverflowQuestion.java” kompiluje wszystko poprawnie, a test jednostkowy, który utworzyłem dla tej klasy, działa dobrze (chociaż intencje oznaczają również wezwanie do create () jako obszar problemu).
Gdzieś więc jakoś IntelliJ ignoruje plik jmime.jar dla podsystemu zamiaru. Jestem zdezorientowany, ponieważ zależność log4j działa dobrze, a wszystko kompiluje się i działa poprawnie. F12 („Idź do deklaracji”) działa na imporcie Logger, ale psuje się na wszystkich importach jmime.
Och, jeszcze jedno, jeśli przejdę do widoku „Pakiety” w oknie „Projekty”, pojawi się pakiet „com.hunnysoft.jmime” i mogę zobaczyć WSZYSTKIE klasy, które zaimportowałem w powyższym fragmencie kodu w sekcji „Biblioteki” . Usunięcie powyższej zależności z pliku pom.xml powoduje zniknięcie tego pakietu i kompilację się psuje.
Wygląda na to, że ścieżka klasy inspekcji jest zepsuta, ale wydaje się, że nie ma na to żadnego ustawienia w Ustawieniach => Zamiary | Obszary kompilatora (nie, że spodziewałem się takich ustawień, uważam, że IDEA powinna już znać poprawną ścieżkę klas na podstawie pliku pom i JDK).
W ostatnim eksperymencie stworzyłem zupełnie nowy standardowy projekt aplikacji J2SE (bez użycia maven) i dodałem plik jmime.jar bezpośrednio do projektu jako jedną z jego bibliotek. Napotykam dokładnie takie same problemy, jak opisane powyżej w tym nowym projekcie.
Oto plik MANIFEST.MF z pliku jar jmime.
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.
Nie widzę nic niezwykłego w tym pliku jar.
Domyślam się, że być może problemem może być brakująca zależność. Ale AFAIK jmime ma być samowystarczalny (JarAnalyzer niczego nie wymyślił, ale nie jestem pewien, czy tak by było, gdyby brakowało słoika zależności).
Czy ktoś ma jakieś POMYSŁY?