[解決済み] 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のクラスが正しい名前を報告しているか、以下の方法で確認してください。 ジャバップ .
関連
-
final, finally, finalizeの違いについて話してください。
-
javaの模造品QQ WeChatのチャットルーム
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a
-
java 例外。Javaツールの初期化
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
Spring Boot による HTTPS アクセスの設定
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
エラーの解決方法 jarfile XXX.jarにアクセスできません。
-
が 'X-Frame-Options' を 'deny' に設定しているため、フレーム内にある。
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
Exception: java.util.NoSuchElementException: 行が見つかりません
-
テストが見つかりませんでした
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について
-
[解決済み] なぜこんなに赤いのか?IntelliJは、すべての宣言/メソッドが見つからない/解決できないと考えるようです。