Piattaforma: IntelliJ Community Edition 10.0.3
SDK: sistema
operativo jdk1.6.0_21 : Windows 7
Quindi ho una strana situazione con IntelliJ che mi ha completamente sconcertato. Ho installato un progetto Maven e ho aggiunto log4j come dipendenza nel file pom.xml. Le ispezioni IDEA funzionano bene e la mia unità testa tutte le operazioni di compilazione ed esecuzione.
Ho quindi aggiunto la libreria jmime di hunnysoft al mio repository maven locale usando mvn install: install-file come segue.
mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \
-DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar
Maven ha installato il file jar nel mio repository locale.
Sono quindi passato alle Impostazioni di IntelliJ => Maven => Servizi repository e ho aggiornato il mio repository locale (in modo che IntelliJ reindicizzi i contenuti del repository).
Infine, ho aggiunto la seguente dipendenza al mio file pom.xml (appena sopra la dipendenza log4j).
<dependency>
<groupId>jmime</groupId>
<artifactId>jmime</artifactId>
<version>3.1.1e</version>
</dependency>
Ora creo una nuova classe come segue:
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;
}
}
Ora per la stranezza. Il meccanismo delle intenzioni di IntelliJ rileva e riconosce bene l'importazione del Logger nel file maven pom. Tuttavia, per tutte le importazioni di hunnysoft riporta: "Impossibile risolvere il simbolo 'ByteString / Field / FieldBody'", MA Build => Compila 'StackOverflowQuestion.java' compila tutto correttamente e il test unitario che ho creato per questa classe funziona bene (anche se le intenzioni contrassegnano la chiamata a create () anche come area problematica).
Quindi da qualche parte, in qualche modo IntelliJ sta ignorando il file jmime.jar per il sottosistema intenzioni. Sono confuso perché la dipendenza log4j funziona bene e tutto si compila e funziona bene. F12 ("Vai alla dichiarazione") funziona sull'importazione del logger, ma si interrompe su tutte le importazioni di jmime.
Oh, un'altra cosa, se vado alla vista "Pacchetti" nella finestra "Progetti" appare il pacchetto "com.hunnysoft.jmime" e posso vedere TUTTE le classi che ho importato nello snippet di codice sopra sotto "Librerie" . La rimozione della dipendenza sopra dal file pom.xml fa scomparire questo pacchetto e la compilation si interrompe.
Sembra che il percorso di classe dell'ispezione sia interrotto, ma non sembra esserci un'impostazione per questo da nessuna parte in Impostazioni => Intenzioni | Aree del compilatore (non che mi aspettassi tali impostazioni, credo che l'IDEA dovrebbe già conoscere il percorso di classe corretto in base al file pom e JDK).
Come esperimento finale ho creato un nuovissimo progetto standard di applicazione J2SE (senza usare Maven) e ho aggiunto il file jmime.jar direttamente al progetto come una delle sue librerie. Ho riscontrato esattamente gli stessi problemi descritti sopra in questo nuovo progetto.
Ecco MANIFEST.MF dal file jar di 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.
Non vedo nulla di insolito in questo file jar.
La mia ipotesi migliore è che forse il problema potrebbe essere un problema di dipendenza mancante. Ma si suppone che AFAIK jmime sia autonomo (JarAnalyzer non fornisce nulla, ma non sono sicuro che lo farebbe se manca un vaso di dipendenza).
Quindi, qualcuno ha qualche IDEA?