[解決済み] IntelliJのインスペクションで「シンボルを解決できない」と表示されたが、コードはコンパイルされる
質問
プラットフォーム IntelliJ Community Edition 10.0.3
SDK: jdk1.6.0_21
OS:Windows 7
そこで、IntelliJで奇妙な状況が発生し、完全に行き詰っています。 私はMavenプロジェクトをセットアップし、pom.xmlファイルの依存関係としてlog4jを追加します。 IDEAの検査は問題なく実行され、私のユニットテストはすべてコンパイルして実行されます。
次に、以下のようにmvn install:install-fileを使って、hunnysoftのjmimeライブラリをローカルのmavenリポジトリに追加しました。
mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \
-DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar
Maven は jar ファイルを私のローカルリポジトリにうまくインストールしました。
その後、IntelliJの設定 => Maven => Repository Servicesに入り、ローカルリポジトリを更新しました(IntelliJがリポジトリの内容を再インデックス化するように)。
最後に、以下の依存関係を pom.xml ファイルに追加しました (log4j 依存関係のすぐ上にあります)。
<dependency>
<groupId>jmime</groupId>
<artifactId>jmime</artifactId>
<version>3.1.1e</version>
</dependency>
ここで、次のように新しいクラスを作成します。
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;
}
}
さて、ここからが変な話です。 IntelliJの意図メカニズムは、maven pomファイル内のLoggerインポートをうまくピックアップして認識します。 しかし、hunnysoftのインポートはすべて、次のように報告されます:"Cannot resolve symbol 'ByteString/Field/FieldBody'", しかし Build => Compile 'StackOverflowQuestion.java' はすべてを正しくコンパイルし、このクラス用に作成したユニットテストも問題なく実行できます(ただし、create()への呼び出しも問題領域として意図的にマークされています)。
つまり、どこかで、どういうわけか、IntelliJ は intention サブシステムの jmime.jar ファイルを無視しているのです。 log4j依存は問題なく動作し、すべてがうまくコンパイルされ実行されるので、私は混乱しています。 F12 ("Go To Declaration") は Logger インポートでは機能しますが、すべての jmime インポートでは壊れます。
ああ、もうひとつ、"Projects" ウィンドウの 'Packages' ビューに行くと、"com.hunnysoft.jmime" パッケージが現れ、上記のコードスニペットでインポートしたすべてのクラスが "Libraries" に表示されます。 pom.xml ファイルから上記の依存関係を削除すると、このパッケージがなくなり、コンパイルが中断されます。
検査のクラスパスが壊れているようですが、設定 => Intentions | Compiler のエリアのどこにもこのための設定はないようです(そのような設定を期待していたわけではなく、IDEAはすでにpomファイルとJDKに基づいて正しいクラスパスを知っているはずだと思います)。
最後の実験として、(mavenを使わずに)全く新しい標準的なJ2SEアプリケーション・プロジェクトを作成し、jmime.jarファイルをライブラリの1つとしてプロジェクトに直接追加してみました。 この新しいプロジェクトでも、上記とまったく同じ問題が発生しました。
以下は、jmime jarファイルの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.
このjarファイルには何も異常はありませんね。
私の最良の推測は、おそらく問題は依存関係の欠落の問題かもしれないということです。 しかし、AFAIKでは、jmimeは自己完結しているはずです(JarAnalyzerは何も表示しませんが、依存関係のあるjarが見つからない場合は表示されないと思います)。
そこで、どなたかIDEAをお持ちの方はいらっしゃいませんか?
解決方法は?
まず最初に
File | Invalidate Caches
を削除し、それでもだめな場合は
IDEAシステムディレクトリ
. その後、Mavenプロジェクトを再インポートして、それがうまくいくかどうかを確認します。
奇妙なケースでは、コンパイルされたクラスが間違った情報を報告し、IDEAを混乱させることがあります。このjarのクラスが正しい名前を報告しているか、以下の方法で確認してください。 ジャバップ .
関連
-
[解決済み] プロトコルハンドラの初期化に失敗しました。
-
[解決済み] Eclipse- Dynamic Web Module 3.0 で新しいプロジェクトを作成するときに Java 1.6 以降が必要なエラーが発生する。
-
[解決済み] アクティビティに割り当てられない
-
[解決済み] SubclipseとJavaHLのインストールで頭を悩ます
-
[解決済み] JavaFX 同じパッケージ内なのに「場所が必要です。
-
[解決済み] IntelliJ - Javaプロジェクト/モジュールをMavenプロジェクト/モジュールに変換する
-
[解決済み】IntelliJ IDEAのデフォルトJDKを変更する方法は?
-
[解決済み】Maven:相対パスでjarに依存関係を追加する
-
[解決済み] Maven: カスタム外部JARを私のプロジェクトにリンクする最良の方法?
-
[解決済み] Mavenです。このプロジェクトのパッケージングでは、ビルドアーティファクトにファイルが割り当てられていません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JVMフラグCMSClassUnloadingEnabledは、実際に何をするのですか?
-
[解決済み] Java Genericメソッドをstaticにするには?
-
[解決済み] 一部の入力ファイルが非推奨のAPIを使用またはオーバーライドしている
-
[解決済み] Javaにおけるシンボリック参照
-
[解決済み] どのように配列の10未満の値(x * 2)を倍増するコードを取得するには?(Java)
-
[解決済み] 文字列が一意な文字であるかどうかを判定する
-
[解決済み] タイプの安全性。アンチェック・キャスト
-
[解決済み] 文字列の長さに応じて文字列をトリミングする
-
[解決済み] .lengthが解決できない、またはフィールドでない
-
[解決済み] なぜこんなに赤いのか?IntelliJは、すべての宣言/メソッドが見つからない/解決できないと考えるようです。