Platform: IntelliJ Community Edition 10.0.3
SDK: jdk1.6.0_21
İşletim Sistemi: Windows 7
Bu yüzden IntelliJ ile beni tamamen şaşırtan garip bir durumum var. Bir Maven projesi kurdum ve pom.xml dosyasında bağımlılık olarak log4j ekledim. IDEA denetimleri sorunsuz çalışıyor ve birim testlerim derleniyor ve çalışıyor.
Daha sonra mvn install: install-file komutunu kullanarak yerel maven veri havuzuma hunnysoft'un jmime kütüphanesini ekledim.
mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \
-DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar
Maven jar dosyasını yerel depoma gayet iyi yükledi.
Daha sonra IntelliJ'in Ayarlar => Maven => Depo Hizmetleri'ne girdim ve yerel depomu güncelledim (böylece IntelliJ, depo içeriğini yeniden dizine ekleyecekti).
Son olarak, pom.xml dosyama (log4j bağımlılığının hemen üstünde) aşağıdaki bağımlılığı ekledim.
<dependency>
<groupId>jmime</groupId>
<artifactId>jmime</artifactId>
<version>3.1.1e</version>
</dependency>
Şimdi aşağıdaki gibi yeni bir sınıf oluşturuyorum:
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;
}
}
Şimdi tuhaflık için. IntelliJ'in niyet mekanizması maven pom dosyasındaki Logger içe aktarma işlemini gayet iyi algılar ve tanır. Ancak, tüm hunnysoft ithalatı için raporlar: "'ByteString / Field / FieldBody' sembolü çözülemiyor", BUT Build => Derleme 'StackOverflowQuestion.java' her şeyi doğru derler ve bu sınıf için oluşturduğum birim testi iyi çalışıyor (gerçi niyetler, create () çağrısını da sorunlu bir alan olarak işaretler).
Yani bir yerde, IntelliJ bir şekilde niyet alt sistemi için jmime.jar dosyasını görmezden geliyor. Ben karıştı çünkü log4j bağımlılığı iyi çalışır ve her şey derler ve iyi çalışır. F12 ("Beyana Git") Logger içe aktarma işleminde çalışır, ancak tüm jmime içe aktarma işlemlerini sonlandırır.
Başka bir şey, "Projeler" penceresindeki "Paketler" görünümüne gidersem "com.hunnysoft.jmime" paketi görünür ve yukarıdaki kod pasajında içe aktardığım TÜM sınıfları "Kütüphaneler" altında görebilirim . Yukarıdaki bağımlılığın pom.xml dosyasından kaldırılması, bu paketin kaybolmasına ve derlemenin bozulmasına neden olur.
Denetimin sınıfyolunun bozuk olduğu anlaşılıyor, ancak Ayarlar => Niyetler | Derleyici alanları (böyle bir ayar beklediğimden değil, IDEA'nın pom dosyasına ve JDK'ya göre doğru sınıfyolunu zaten bilmesi gerektiğine inanıyorum).
Son bir deneme olarak yepyeni bir standart J2SE uygulama projesi oluşturdum (maven kullanmadan) ve jmime.jar dosyasını kütüphaneye doğrudan projeye ekledim. Bu yeni projede yukarıda açıklanan sorunların aynısını yaşıyorum.
İşte jmime jar dosyasından MANIFEST.MF.
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.
Bu kavanoz dosyasında olağandışı bir şey görmüyorum.
En iyi tahminim, sorunun belki de eksik bir bağımlılık sorunu olabileceğidir. Ancak AFAIK jmime'in kendi içinde kalması gerekiyordu (JarAnalyzer hiçbir şey üretmiyor, ancak bir bağımlılık kavanozunun eksik olması durumunda emin değilim).
Yani, IDEA'ları olan var mı?