Plateforme: IntelliJ Community Edition 10.0.3
SDK: jdk1.6.0_21
OS: Windows 7
J'ai donc une situation étrange avec IntelliJ qui m'a complètement déconcerté. J'ai configuré un projet Maven et j'ajoute log4j comme dépendance dans le fichier pom.xml. Les inspections IDEA fonctionnent bien et mon unité teste tous les compiler et exécuter.
J'ai ensuite ajouté la bibliothèque jmime de hunnysoft à mon référentiel maven local en utilisant le fichier mvn install: install-file comme suit.
mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \
-DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar
Maven a très bien installé le fichier jar dans mon référentiel local.
Je suis ensuite allé dans Paramètres d'IntelliJ => Maven => Services de référentiel et j'ai mis à jour mon référentiel local (afin qu'IntelliJ réindexe le contenu du référentiel).
Enfin, j'ai ajouté la dépendance suivante à mon fichier pom.xml (juste au-dessus de la dépendance log4j).
<dependency>
<groupId>jmime</groupId>
<artifactId>jmime</artifactId>
<version>3.1.1e</version>
</dependency>
Je crée maintenant une nouvelle classe comme suit:
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;
}
}
Maintenant pour l'étrangeté. Le mécanisme d'intention d'IntelliJ détecte et reconnaît très bien l'importation de l'enregistreur dans le fichier pom maven. Cependant, pour toutes les importations hunnysoft, il signale: "Impossible de résoudre le symbole 'ByteString / Field / FieldBody'", MAIS Build => Compile 'StackOverflowQuestion.java' compile tout correctement et le test unitaire que j'ai créé pour cette classe fonctionne bien (bien que les intentions marquent également l'appel à create () comme un problème).
Quelque part, IntelliJ ignore en quelque sorte le fichier jmime.jar pour le sous-système d'intention. Je suis confus parce que la dépendance log4j fonctionne bien et que tout se compile et fonctionne correctement. F12 ("Go To Declaration") fonctionne sur l'importation Logger, mais interrompt toutes les importations jmime.
Oh, une autre chose, si je vais dans la vue "Packages" dans la fenêtre "Projets", le package "com.hunnysoft.jmime" apparaît et je peux voir TOUTES les classes que j'ai importées dans l'extrait de code ci-dessus sous "Bibliothèques" . La suppression de la dépendance ci-dessus du fichier pom.xml entraîne la disparition de ce package et la compilation s'arrête.
Il semble que le chemin de classe de l'inspection soit rompu, mais il ne semble pas y avoir de paramètre pour cela n'importe où dans Paramètres => Intentions | Zones du compilateur (pas que je m'attendais à de tels paramètres, je pense que l'IDEA devrait déjà connaître le chemin de classe correct en fonction du fichier pom et du JDK).
Comme dernière expérience, j'ai créé un tout nouveau projet d'application standard J2SE (sans utiliser maven) et ajouté le fichier jmime.jar directement au projet en tant qu'une de ses bibliothèques. Je rencontre exactement les mêmes problèmes que ceux décrits ci-dessus dans ce nouveau projet.
Voici le MANIFEST.MF du fichier 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.
Je ne vois rien d'inhabituel dans ce fichier jar.
Ma meilleure supposition est que le problème pourrait être un problème de dépendance manquant. Mais AFAIK jmime est censé être autonome (JarAnalyzer ne propose rien, mais je ne suis pas sûr que ce soit le cas si un pot de dépendance est manquant).
Alors, quelqu'un a des IDÉES?