Platform: IntelliJ Community Edition 10.0.3
SDK: jdk1.6.0_21
OS: Windows 7
Jadi saya punya situasi aneh dengan IntelliJ yang membuat saya benar-benar bingung. Saya menyiapkan proyek Maven dan menambahkan log4j sebagai dependensi dalam file pom.xml. Inspeksi IDEA berjalan dengan baik dan unit saya menguji semua kompilasi dan berjalan.
Saya kemudian menambahkan jmime library hunnysoft ke repositori maven lokal saya menggunakan mvn install: install-file sebagai berikut.
mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \
-DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar
Maven menginstal file jar dengan baik ke repositori lokal saya.
Saya kemudian pergi ke Pengaturan IntelliJ => Maven => Layanan Repositori dan Memperbarui repositori lokal saya (sehingga IntelliJ akan mengindeks ulang isi repositori).
Akhirnya, saya menambahkan dependensi berikut ke file pom.xml saya (tepat di atas dependensi log4j).
<dependency>
<groupId>jmime</groupId>
<artifactId>jmime</artifactId>
<version>3.1.1e</version>
</dependency>
Sekarang saya membuat kelas baru sebagai berikut:
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;
}
}
Sekarang untuk keanehannya. Mekanisme niat IntelliJ mengambil dan mengenali impor Logger di file maven pom. Namun, untuk semua impor hunnysoft ia melaporkan: "Tidak dapat menyelesaikan simbol 'ByteString / Field / FieldBody'", TAPI Bangun => Kompilasi 'StackOverflowQuestion.java' mengkompilasi semuanya dengan benar dan unit test yang saya buat untuk kelas ini berjalan dengan baik (meskipun niat menandai panggilan untuk membuat () sebagai area masalah juga).
Jadi di suatu tempat, entah bagaimana IntelliJ mengabaikan file jmime.jar untuk subsistem niat. Saya bingung karena dependensi log4j berfungsi dengan baik dan semuanya mengkompilasi dan berjalan dengan baik. F12 ("Pergi Ke Deklarasi") bekerja pada impor Logger, tetapi istirahat pada semua impor jmime.
Oh, satu hal lagi, jika saya pergi ke tampilan 'Package' di jendela "Projects" paket "com.hunnysoft.jmime" muncul dan saya dapat melihat SEMUA kelas yang saya impor dalam potongan kode di atas di bawah "Libraries" . Menghapus ketergantungan di atas dari file pom.xml menyebabkan paket ini menghilang dan kompilasi rusak.
Tampaknya classpath inspeksi rusak, tetapi tampaknya tidak ada pengaturan untuk ini di mana saja di Pengaturan => Niat | Area kompiler (bukan yang saya harapkan pengaturan seperti itu, saya percaya IDEA harus sudah tahu classpath yang benar berdasarkan file pom dan JDK).
Sebagai percobaan terakhir saya membuat proyek aplikasi J2SE standar baru (tanpa menggunakan maven) dan menambahkan file jmime.jar langsung ke proyek sebagai salah satu perpustakaannya. Saya mengalami masalah yang sama persis seperti yang dijelaskan di atas dalam proyek baru ini.
Ini MANIFEST.MF dari file 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.
Saya tidak melihat sesuatu yang tidak biasa dalam file jar ini.
Dugaan terbaik saya adalah bahwa mungkin masalahnya mungkin karena masalah ketergantungan yang hilang. Tapi AFAIK jmime seharusnya mandiri (JarAnalyzer tidak datang dengan apa pun, tapi saya tidak yakin itu akan terjadi jika toples ketergantungan hilang).
Jadi, ada yang punya IDEA?