web-dev-qa-db-ja.com

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] - > [リポジトリサービス]に移動し、ローカルリポジトリを更新しました(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のすべてのインポートで、「シンボル 'ByteString/Field/FieldBody'を解決できません」、 _ but _ Build => Compile 'StackOverflowQuestion.Java'の順にレポートされます。このクラスは問題なく動作します(ただし、意図的にcreate()への呼び出しを問題領域としてマークしています)。

だからどこかで、どういうわけかIntelliJは意図サブシステムのためにjmime.jarファイルを無視しています。 log4jの依存関係は問題なく動作し、すべてがコンパイルされ、問題なく動作するため、混乱しています。 F12( "Go To Declaration")はロガーのインポートでは機能しますが、jmimeのインポートではすべて無効になります。

もう1つ、「プロジェクト」ウィンドウの「パッケージ」ビューに移動すると、「com.hunnysoft.jmime」パッケージが表示され、上記のコードスニペットの「ライブラリ」の下にインポートしたすべてのクラスが表示されます。 。 pom.xmlファイルから上記の依存関係を削除すると、このパッケージは消え、コンパイルは中断されます。

検査のクラスパスが壊れているように見えますが、Settings => Intentions |の中のどこにもこのための設定はありません。コンパイラ領域(このような設定を想定していなかったので、IDEAはpomファイルとJDKに基づく正しいクラスパスをすでに知っているはずです)。

最後の実験として、(mavenを使用せずに)まったく新しい標準のJ2SEアプリケーションプロジェクトを作成し、そのライブラリの1つとしてjmime.jarファイルをプロジェクトに直接追加しました。この新しいプロジェクトでは、上で説明したのとまったく同じ問題に遭遇します。

これは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を持っている?

476
Kevin Sitze

まず最初にFile | Invalidate Cachesを試してみてください。それでも解決しない場合は IDEA system directory を削除してください。その後、Mavenプロジェクトを再インポートして、それが役立つかどうかを確認してください。

奇妙な場合には、コンパイルされたクラスは間違った情報を報告し、IDEAを混乱させるかもしれません。このjarのクラスが javap を使用して正しい名前を報告することを確認してください。

839
CrazyCoder

次のトリックは私のためにこの問題を解決しました:

  • コードエディタを右クリック
  • Mavenにカーソルを合わせて展開
  • Reimportをクリック

私のアイデアのバージョンは12.0.4です

93
rshahriar

Gradleユーザーの場合:

プロジェクトをbuild.gradleファイルと同期させる必要があるかもしれません。

プロジェクトペインの下にあるGradleファイルを右クリックすると、これを行うことができます。 しかし これは私には何もしていないようです(私のバージョンではバグが疑われます)。あなたが待っているであろうIntelliJのタスクを開始しないのでこれが起こるかどうかを知っているでしょう。代わりに、Gradleツールペインを開いてから、同期(更新)ボタンをクリックしてください。キャッシュを無効にして再起動してもうまくいかない場合、これは私にとって役に立ちました。

私自身の状況:私はGradleと一緒にScalaプロジェクトを使用していました、そしてこれをしなければなりませんでした。

25
bbarker

上記の解決策のどれも私のために働きませんでした。 main.imlファイルを手動で削除するだけで、突然うまくいきました。

22
cerisier

ファイル - >キャッシュの無効化を実行してIDEを再起動したときのもう1つのステップは、プロジェクトを開くことです。自動インポートを有効にするかどうかを尋ねるトーストボックスが右上に表示され、問題は解決しました。

19
Matthew Chen

これは、この同じ質問に対する別の回答でも述べられています ここ 、しかしこれだけで私のためにこれを直すことができます。私はすべてのビルドをIntelliJの外部の別の端末で行います。そのため、キャッシュにはIntelliJアプリがそれらを読み取るための適切な権限を設定する必要があります。

プロジェクトのルートフォルダから実行してください。

$ mvn -U idea:idea
17
Tom

確認すべきもう1つのこと:依存関係が重複していないことを確認してください。私の場合、この振る舞いを示すモジュールは次のように誤って設定されていることがわかりました。それは他のモジュールへの依存関係を持ち、その他のモジュールによって生成されたjarへの依存関係を持ちます。これは重複して参照されるすべてのシンボルを意味し、あいまいでした。

12
Landon Kuhn

プロジェクト構造の矛盾した/重複したモジュール名は私にとってこの問題を引き起こしていました。

  1. File -> Project Strucutre -> Modulesに行く
  2. 赤い下線があるモジュールをクリックして
  3. 「依存関係」タブに移動
  4. 赤い依存関係が実際に依存関係リストに存在することを確認してください。そうでない場合は、既存の依存関係名と一致するようにそれらの名前を変更します。

IntelliJが正しくシャットダウンされず、名前が変更されたモジュール名を正しく保存できない場合に起こります。

9

修正版は公開されましたか? 2013年の「コンパイラのオーバーホール」により、v11/12に最初から影響を及ぼした問題が表示されます。2014年末までのJiraでの関連問題についての議論とともに。 http://youtrack.jetbrains.com/issue/IDEA-98425

Jiraでは IDEA-98425 固定とマークされていましたが、未検証(v12.0.3以降)。次のどれも 回避策 この問題を解決するのに役立ちませんでした "シンボルを解決できません" バージョンの問題 13.1.1 Windowsの場合

a。削除 .IdealIC13 folder(その後、File\Invalidate Caches/Restart)

b。 From Mavenプロジェクト window、

b.1 mvn -U idea:idea - > mavenの目標を実行すると、依存関係を再ロードすることになります。これは前の作業ですが、最後のFRI以来、プロジェクトを再コンパイルしようとしたときにこの目標の実行が失敗しました(もちろん "Unable to resolve Symbols"として失敗します。最初にこのコマンドを実行して修正します) mvn -version - 3.2.5を参照しているMavenのバージョンとそれが動作していることを示す

b.2プロジェクトを右クリックし、 再インポート

b.3ファイル\ キャッシュの無効化/再起動

c。 [ファイル] - > [設定] - > [Maven] - > [インポート] - > [プロジェクトをインポートするためにmaven3を使用する]の両方を有効または無効にします。

d。 Settings\Maven\Multiprojectビルド失敗ポリシー=最後に失敗(デフォルトの代わりに)

何も動作しません。 Mavenに対するIntelliJのサポートに何が起きていますか。

https://youtrack.jetbrains.com/issue/IDEA-99302

JetBeansのリリース履歴から、 https://www.jetbrains.com/company/history.jsp

IntelliJ v14 NOV 2014

IntelliJ v13 DEC 2013

私はv12が修正されたと仮定します(ただし、 未検証 )が、今後のリリースに組み込まれる予定です。どのIntelliJバージョンで同様の問題を抱えている人はいますか?あなたの経験を共有してください。 IntelliJ Mavenのサポートが壊れているようです。

8
user3761555

私のプロジェクト構造:

src -> main -> scala -> mypackages

うまくいったこと:

scalaフォルダを右クリックし、「ディレクトリをソースルートとしてマーク」をクリックします。

4
axiom

他の答えはどれも私のために働きませんでした。 IntelliJが間違った.m2ファイルを指していたため、私のインポートは解決されませんでした。

IntelliJのバージョン: IntelliJ Idea 2018.1.5

.m2 ディレクトリの場所が間違ったパスを指していました。それを直すために私がしたのはIntelliJを正しい.m2ディレクトリに向け直してそれを更新することだけだった。

まず、に移動します。 ファイル - >設定 - >ビルド、実行、配置 - >ビルドツール - > Maven

ユーザー設定ファイル: ローカルリポジトリ: を私の.m2ディレクトリの正しい場所に変更する必要がありました。

この後に行きます: ファイル - >設定 - >ビルド、実行、デプロイ - >ビルドツール - > Maven - >リポジトリ

そして更新ボタンをクリックします。

4
Tim

私はちょうどこの問題を抱えていました、そしてそれはただ消えません。私は結局、~内のIntelliJ configディレクトリを一掃し、私のIntelliJプロジェクトを最初から再構築しました。 (キャッシュされたファイルなどの問題を解決するために1時間を費やすのに比べて、これは最後に約15分しかかかりませんでした)。

私の推測では、最初の問題はjavathings.blogspot.com/2009/11/too-many-open-files-in-intellij-idea.html(NB:2018年現在、リンクは切れていますが、archive.orgには ページのコピーがあります この回答が最初に書かれた頃から)のようなものが原因です。 )またはJavaがクラッシュする原因となるディスク容量/メモリの問題。 IntelliJは壊れたようです。

3
mozboz

時々、私はただプロジェクト構造を開いて、プロジェクトをクリックしてくださいそしてそれから SDKバージョンを選んでください

2
Arthur Wu

あなたのMavenプロジェクトがマルチモジュールプロジェクトである場合、intellijによっていくつかのモジュールが無視されていないか確認してください。

  1. [表示] - > [ツールウィンドウ] - > [Mavenプロジェクト]をクリックし、いくつかのモジュールが無視されるかどうかを確認します(無視されたモジュールは灰色で表示されます。たとえば、次の図のgs-multi-module)。

enter image description here

  1. 無視されたモジュールを右クリックしてUnignore Projectsを選択してください。

enter image description here

その後intellijがインデックス作成を終了するのを待ちます。

2
Searene

他の選択肢として。

JDK7_07を使用したときにもこの問題が発生しました。私はすべての答えをここで試しました(IDEAシステムディレクトリを削除することを除いて)。しかし、私はまだ問題を抱えています。だから私はそれをやったのです:

最新のJDK(JDK7_45)をインストールして、IntellijのJDKを新しいものに設定すればうまくいきます。

2
ismailsunni

プロジェクトを再インポートしてもうまくいきました。 「プロジェクト」 - >「Maven」 - >「再インポート」を右クリックします。

「ファイル」 - >「キャッシュの無効化」を実行してIDEを再起動したときに、プロジェクトを開きます。右上の「Mavenの変更が検出されました」というダイアログが表示され、インポートして自動インポートを有効にするオプションがありました。ここにプロジェクトをインポートした後でも、私は同じ問題を抱えていました。上記のステップは問題を解決しました。

2
Sandeep

私の場合、私はIntellijIdeaからSpring Bootプロジェクトを開こうとしているのですが、Spring関連のファイルをすべてインポートできないのと同じ問題を抱えています。

それから私はしました:

[ファイル] - > [プロジェクトを閉じる] - > [プロジェクトのインポート] - > [外部モデルからのインポート] - > [Gradleの選択] - > [次へ] - >ファイルの場所からプロジェクトを選択 - > [完了]

今、すべてが期待通りにうまく機能しています。

私はここで多くの答えを見ました、しかし私はついにこの解決策を見つけました。それは私のような人に使うかもしれません。

2
Shylendra Madda

キャッシュを無効にして再起動した後。そして私のMaven設定が大丈夫であることを確認して、私はまだ私が依存関係として設定したモジュールのための「シンボルを解決できない」を見ていました。私はそれが間違った範囲に設定されていたことがわかりました。

モジュールを右クリックしてOpen Module Settingsを選択すると確認できます。依存関係タブをクリックし、解決できない依存関係の範囲が[コンパイル]に設定されていることを確認します。

2
user3565334

私の場合は、buildDirだけが削除されます。この場合、File | Invalidate Cachesは機能しません。

Build | Make Projectの前にFile | Invalidate Cachesを実行すると、すべてうまくいきます。

1
chiguri

上記の解決策のどれも私のためにそれを解決しませんでした。私はコードがうまくコンパイルされたがIntelliJがそれがインポートを見つけることができなかったことを示した同じ問題を抱えていた。 IntelliJがコードの完成から最初の場所でインポートを提案したとしても。

私の解決策は、すべてをデフォルトのパッケージに移動し、com.foo.barパッケージを削除してから再度作成して、すべてを元に戻すことでした。

1
jmhage
  1. 「設定」を開く
  2. "Maven"を検索する
  3. 「Maven」の下の「無視されたファイル」をクリックしてください。
  4. 不足している依存関係が含まれているpom.xmlファイルのチェックを外します
  5. 「OK」をクリック
  6. 「ファイル」 - >「キャッシュの無効化/再起動」をクリックします。
  7. [無効にして再起動]をクリックします
1
Jasper Citi

時々、あなたはcom.mydomain.somethingのようなパッケージを作成するとき、ディレクトリ構造 は作成されない そしてあなたは 単一のフォルダを残される この場合名前は "com.mydomain.something"とするのような構造

com
|_mydomain
  |_something 
1
test0101

Java内にある:imlファイルを削除し、プロジェクト内のフォルダーをテストして、無効にして再起動します。

プロジェクトを削除してもいいですか。はい入れます。エラーが発生します。

1

提案された解決策はうまくいきませんでした。 pom => maven => unignoreプロジェクトを右クリックして、 unignore いくつかのプロジェクトを実行しなければなりませんでした。

その後、

mvn clean install -T 6 -DskipTests

コンソールで、IntelliJはまた幸せでした。プロジェクトがどのように無視されるようになったのかわかりません...

1
Ronald Teune

Intellij Ideaユーザーにとっては、プロジェクトをインポートする前にこのコマンドを使用すると便利です。

./gradlew build ./gradlewのアイデア

1
Ivan Aracki

Gradleプロジェクトの場合:

  1. 終了 IntelliJ IDEA
  2. <problematic-project-root>/.ideaディレクトリを削除します
  3. <problematic-project-root>/.gradleディレクトリを削除します
  4. .iml 内の<problematic-project-root>ファイルをすべて削除します。
    • windows コマンドプロンプト DEL /S /Q *.iml
    • linux:find . | grep -e .iml$ | xargs rm
  5. プロジェクトを IntelliJ IDEA Gradle に再インポートします。
1
Eric

はい、必要なJARを含むライブラリを作成し、それらをモジュールの依存関係として追加する必要があるようです。

1
duffymo

無効キャッシュは私のために働いたが、アプリケーションを実行した後に同じエラーがありました。

だから私は試してみました( Intellij ):

1 - メニューバー - リファクタリング| ビルド |実行|ツール - クリック ビルド それから プロジェクトの再ビルド

2 - MVNクリーン

3 - プロジェクトを右クリック> Maven>ソースの生成とフォルダの更新

これがあなたのために働くことを願っています。

ありがとう

0
Djalas

mvn idea:ideaは私のために働きました。それが見つかりました ここ 。 1時間以上費やした、誰かに役立つことを願って

0
nilesh

私にとってうまくいったのは、赤いマークのついたクラスがあったディレクトリを「ディレクトリソースルートとしてマークする」ことです。何らかの理由でそれがマークされていなかったようです。

0
DarkAngeL

check import Maven projects automatically, fixed my issue

自動的にインポートMavenプロジェクトを確認し、私の問題を修正しました。私は2時間かけて、自分が間違っているところを見つけ出しました。最後にそれを修正することができました。

0
user3651854

Idea 2017.1 + Gradleでは、このプラグインはどういうわけかバグがあります。すべて同期しようとしました、無効化+再起動、何も動作しませんでした。 https://github.com/gradle/gradle/issues/2315 によると、これは私のために働いた:1。アイデアを閉じます2。コマンドラインでgradleアイデアを入力します(3ファイルを生成する必要があります。 、.iws)3.アイデアを実行し、作成したファイル.iprを開きます。これにより、プロジェクトが最初からインポートされ、これら3つのファイルには依存関係が固定されています。

0
Bechyňák Petr

私の場合、この問題は、私のMavenプロジェクトでファイルの大きな再構成をチェックアウトした後に発生しました。チェックアウト時に、私は自分自身の中に未チェックの変更をまだアクティブにしていました。私が言うことができる限り、変更は再構成されているファイルのどれにもありませんでした。

キャッシュを無効にして再起動してもうまくいきませんでした。仕事は何でした:

  • 大きなリストラチェックアウトの前に行った変更を元に戻す
  • すべてのMavenモジュールを再インポートする
0
Joman68

mavenプロジェクトの場合は、設定 - >ビルドツール - > Maven - >インポートに進みます。 「Mavenプロジェクトを自動的にインポートする」チェックボックスをチェックします。問題を解決します。

0
Johnny Martin

何も解決しない場合は、ソースディレクトリを右クリックし、ディレクトリを "Source Directory"としてマークしてからプロジェクトディレクトリを右クリックしてmaven - > re-importを選択します。

これで私の問題は解決しました。

0
Hari Krishnan

MAVENの場合、

上記の方法をすべて試しましたが、解決策が見つかりませんでした。

以下は私が試した手順です(いくつかの解決策の組み合わせ)。

  1. mvn clean

  2. mvn idea:clean

  3. キャッシュを無効にして再起動する
  4. プロジェクト構造に表示されている余分な.imlファイルをすべて削除します。
  5. プロジェクトのルートディレクトリで、mvn idea:ideaとmvn clean installを実行して、Mavenプロジェクトのすべての依存関係を再インポートします。

(project/subprojectsの.imlファイル以外の余分な.imlファイルがないことを確認してください)

0
Aakash Parashar

すべてのpom.xmlファイルが正しく設定されていてもIntelliJのMavenに問題がある場合は、次の手順を実行します

  1. 最近IntelliJのmavenの使い方を読む
  2. IntelliJがBundled Maven 3を使用するように設定されていることを確認してください。
  3. IntelliJのMaven 3リポジトリ索引付けを実行している実際のJavaプロセスを検索し、 _ terminate _ とします(IntelliJの実行中に終了を実行できます)。インデックスや依存関係に関する問題が利用できない場合(思考リポジトリはpom.xmlで設定されています)。
  4. 強制 "IntelliJ /設定/ビルドツール/ Maven /リポジトリ/"にあるすべてのリポジトリを更新します。 ほとんどの時間、ディスク容量、帯域幅が必要です。 Maven中央レポのインデックスを更新するのに20分以上かかりました。
  5. IntelliJからもう一度Mavenプロジェクトをすべて再インポートする
  6. 複数のリポジトリと複雑なプロジェクトがある場合は、IntelliJとそのデーモンJavaプロセスを一晩実行したままにするためにステップ1から4を実行することをお勧めします。そのため、次の日にすべて同期します。理論的には すべての人気のあるインデックス化されたリポジトリ を使用して同時にすべてのリポジトリのインデックス更新を起動することができます(IntelliJはキューを作成して更新を順次実行します)そのためにもヒープスペースを増やす必要があります。

P.S私は、Mavenインデックスの更新を処理するIntelliJのJavaデーモンプロセスが何か問題を起こしていることを理解するために何時間もかけていました(ステップ3)。 IntelliJ自体を再起動しなくても問題は解決しました。

0

「ファイル - >キャッシュの無効化と再起動」を選択すると、すべての依存関係が解決されます。

0
Kishore Bhosale

Invalidate Caches/Restart ...の一番の提案は私にはうまくいきませんでしたし、他の解決策のどれもしませんでした。それは私のmavenリポジトリが間違って設定されていたことになりました、私は手動でsettings.xmlとリポジトリディレクトリを上書きすることでこれを修正しました:

ファイル - > 設定 ... - > ビルド、実行、配置 - > ビルドツール - > Maven

次に、 ユーザー設定ファイル および ローカルリポジトリ について、 Override を確認し、正しいsettings.xmlとリポジトリディレクトリを指定します。

0
Richard Vu

新しいコンピュータに切り替えたときにも、同様の問題がありました。

すべてのIDEAファイル(関連する%APPDATA%フォルダーも含む)をコピーしましたが、Mavenのビルドは成功しましたが、IDEAはビルド時に依存関係からクラスを見つけられませんでしたそれ。

解決策:私は新しくてきれいなIDEAプロファイルから始め、%APPDATA%フォルダからフォルダを削除しました。

0
Ben

[ファイル] - > [プロジェクト構造] - > [SDK]に移動して、SDKファイルのパスが正しいかどうかを確認します。

0
Arvand

この問題を解決した理由

私は別のブランチを持ち、そのブランチに切り替えてmvn clean installでプロジェクトをビルドしました。すべて問題なかったので、マスターに戻ってプロジェクトをもう一度ビルドするとエラーは消えました。キャッシュを無効にして再起動しても役に立ちませんでした。

0
nolazem

Intellijプロパティを変更すると、インポートしたファイルが大きすぎる可能性があります。 25000、そしてIDEを再起動し、問題は消えた。お役に立てれば。

0
Chaojun Zhong

Java.beansなどの標準Javaライブラリのインポートに問題がありました。*

私のRedhat 7システムで正しいJREパスを指すように修正しました。

「ファイル」 - >「プロジェクト構造」 - >「SDK」 - > 1.8「JDKホームパス」を/ usr/libではなく/usr/lib/jvm/Java-1.8.0-openjdk-1.8.0161-2.b14.el7.x86_64に変更しました。 /jvm/Java-1.8.0-openjdk-1.8.0161-2.b14.el7_4.x86_64

Jdkへの以前のパス(パスに_4の違いがあります)には、ほとんど何もありませんでした。多くのJavaライブラリが欠けていました。

0
mastash3ff

これは、依存関係のjarファイルがFat Jarでもある場合によく起こります。幸い、私はFat Jarを非Fat Jarにした後、Fat Jarの構築をコントロールできました。ここでの答えやコメントに対するその他の修正はどれも私にとってはうまくいきませんでした。また、おそらく注目に値するのは、私のコードがKotlinにあり、Fat JarがKotlinの依存関係もバンドルしていたことです。

0
Piacenti