Plataforma: IntelliJ Community Edition 10.0.3
SDK: jdk1.6.0_21
SO: Windows 7
Então, eu tenho uma situação estranha com o IntelliJ que me deixa completamente perplexo. Configurei um projeto Maven e adicionei log4j como uma dependência no arquivo pom.xml. As inspeções da IDEA funcionam bem e minha unidade testa todos os compilar e executar.
Em seguida, adicionei a biblioteca jmime da hunnysoft ao meu repositório maven local usando o arquivo mvn install: install-file da seguinte maneira.
mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \
-DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar
O Maven instalou o arquivo jar muito bem no meu repositório local.
Fui então para Configurações do IntelliJ => Maven => Serviços de repositório e atualizei meu repositório local (para que o IntelliJ reindexasse o conteúdo do repositório).
Por fim, adicionei a seguinte dependência ao meu arquivo pom.xml (logo acima da dependência do log4j).
<dependency>
<groupId>jmime</groupId>
<artifactId>jmime</artifactId>
<version>3.1.1e</version>
</dependency>
Agora crio uma nova classe da seguinte maneira:
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;
}
}
Agora, para a estranheza. O mecanismo de intenção do IntelliJ capta e reconhece perfeitamente a importação do Logger no arquivo maven pom. No entanto, para todas as importações da hunnysoft, ele reporta: "Não é possível resolver o símbolo 'ByteString / Field / FieldBody'", MAS Compilar => Compilar 'StackOverflowQuestion.java' compila tudo corretamente e o teste de unidade que criei para esta classe funciona bem (embora as intenções marcam a chamada para create () também como uma área problemática).
Então, em algum lugar, de alguma forma, o IntelliJ está ignorando o arquivo jmime.jar para o subsistema de intenção. Estou confuso porque a dependência do log4j funciona bem e tudo compila e funciona bem. F12 ("Ir para declaração") funciona na importação do Logger, mas quebra em todas as importações do jmime.
Ah, outra coisa, se eu for para a visualização 'Packages' na janela "Projects", o pacote "com.hunnysoft.jmime" será exibido e eu posso ver TODAS as classes que importei no trecho de código acima em "Bibliotecas" . A remoção da dependência acima do arquivo pom.xml faz com que este pacote desapareça e a compilação quebre.
Parece que o caminho de classe da inspeção está quebrado, mas não parece haver uma configuração para isso em nenhum lugar nas Configurações => Intenções | Áreas do compilador (não que eu esperasse essas configurações, acredito que o IDEA já deve conhecer o caminho de classe correto com base no arquivo pom e no JDK).
Como experimento final, criei um novo projeto de aplicativo J2SE padrão (sem usar o maven) e adicionei o arquivo jmime.jar diretamente ao projeto como uma de suas bibliotecas. Eu encontro exatamente os mesmos problemas descritos acima neste novo projeto.
Aqui está o MANIFEST.MF do arquivo 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.
Não vejo nada incomum neste arquivo jar.
Meu melhor palpite é que talvez o problema seja um problema de dependência ausente. Mas o AFAIK jmime deve ser independente (o JarAnalyzer não cria nada, mas não tenho certeza se o jar de dependência está faltando).
Então, alguém tem alguma ideia?