Mavenの「シンボルが見つかりません」というメッセージが役に立たない


82

これは本当に単純な質問であり、おそらく私が知らない場所の設定ですが、Googleはこの質問に対して特に役に立たず、コンパイルエラーメッセージを変更する方法ではなく、コンパイルエラーに関する結果を提供します。

Mavenを使用してプロジェクトをビルドすると、大まかに次のような形式のエラーメッセージが表示されます。

[エラー] /path/to/source/Main.java:[13,8]エラー:シンボルが見つかりません

antまたはjavacを使用してビルドすると、実際にはエラーメッセージに見つからないシンボルが表示されます。Mavenは行番号と文字位置を教えてくれますが、実際の記号を表示する方が便利です。上記の行は、「シンボルが見つかりません」エラーのそれぞれに指定された唯一の行です。シンボルを与える上下の線はありません。Mavenにその情報を教えてもらう方法が必要だと思いますが、それが何であるかはわかりません。mvnが使用を試みるように指示したので、-eオプションを試しましたが、実際のシンボルではなく、エラーのMavenトレースバックが提供されました。

何か助けはありますか?

これがmvn--versionの出力です

Apache Maven 3.0.4 (rNON-CANONICAL_2012-10-24_11-25_mockbuild; 2012-10-24 07:25:04-0400)
Maven home: /usr/share/maven
Java version: 1.7.0_09-icedtea, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.6.6-1.fc17.x86_64", arch: "amd64", family: "unix"

そして、これがmavenによって出力された(ディレクトリが短縮されただけの)エラーメッセージの例です(役に立たない):

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /path/to/source/SoundEngineFilePanel.java:[33,8] error: cannot find symbol
[ERROR]  class SoundEngineFilePanel
/path/to/source/SoundEngineFilePanel.java:[36,8] error: cannot find symbol
[INFO] 2 errors 
[INFO] -------------------------------------------------------------

見つからない記号は「fakeThing」と「fakeThing2」であり、SoundEngineFilePanelではありません。


バージョン情報(特にMaven)などを提供できますか?これは私に起こることではありません。
デイブニュートン

Mavenの「シンボルが見つかりません」というメッセージがあまり役に立たないのは事実です。私のコードがサードパーティライブラリの特定のメソッドを長い間使用していたが、どういうわけかそのメソッドがサードパーティライブラリから削除された私のケースをお伝えできます。Mavenがコードをコンパイルしていたとき、それは失敗していました。メッセージが「シンボルが見つかりません」ではなく「メソッドが見つかりません」であった場合、それは非常に効果的で時間もかかりませんでした。
Atul S. 2017

この質問にさらに別の答えを追加したいと思う人々に。 質問を注意深く読んでください。 (Mavenで)「シンボルが見つかりません」コンパイルエラーを修正する方法についてではありません。これは、Mavenにさらに有益なコンパイルエラーメッセージを表示させる方法についてです。つまり、ソースコードコンテキストを含むメッセージ... likejavacおよびAntdo。
スティーブン

回答:


41

これは、JDK7に関連するMavenコンパイラプラグインのバグだと思います。JDK6で正常に動作します。


5
maven-compiler-plugin3.1で修正されているようです。george-papatheodorouの答えを参照してください。
Jared Beck

30
これは、コンパイルエラーがまだjavaの8で起こっている。..ソリューションではありません
イータ

Windows10がクラッシュしたときに発生し始めました。それが要因かもしれませんか?
TheRealChx1 0119

1
@Eta(そして上記のコメントを+1した27人ほど)へ-あなたは要点を見逃していると思います。この質問は、Mavenからの役に立たないメッセージに関するものです。この回答では、コンパイルエラーメッセージをより役立つものにする方法について説明しています。そもそもコンパイルエラーの原因となった問題は修正されません。その問題は(通常)ソースコードにあります!参照「シンボルを見つけることができません」んやエラー平均「シンボルを解決できません」って何?
スティーブン

35

3.1へのアップデート:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>

このプラグインの最新バージョンを判別するための最良の方法は何ですか?私が見つけたのはこのページだけです:maven.apache.org/plugins/maven-compiler-plugin/…ありがとう。
Jared Beck

あなたはここでそれを見つけることができるように@JaredBeckは思える:mvnrepository.com/artifact/org.apache.maven.plugins/...
DSimon

6

私の場合、問題は新しいクラスを追加したために再構築されなかった子jarにあり、その子jarのpom.xmlは、(<parent>タグを使用して)子と親の関係として失敗したpom.xmlに関連付けられていませんでした。そこで、エラーが発生した後、子jarを再構築しました。


これも私の問題でした。Mavenには確かに既存のバグがありますが、ほとんどの場合、Mavenエラーまたはビルドの問題はこのようなシナリオで説明されると思います。
Michael M

4

私も同じ問題を抱えていました。その理由は、2つのJARファイルがMaven依存関係を介して追加されなかったため、実行するmvn compileと、コンソールにエラーエラーが表示されます。

シンボルが見つかりません、クラス...」。

それを修正するには:

  1. ビルドパスからJARファイルを削除します
  2. ビルドパスに追加
  3. 実行 mvn compile

2
ビルドパスからJARファイルを削除するために使用した手順をリストしてください。ターゲットフォルダーを削除してmavenを使用して再コンパイルしようとすると、同じエラーが発生しますか?ありがとう
turnip424 2018年

3

これは、この問題、つまりPOMファイルで定義した再パッケージ化が原因で発生します。

これをmavenプラグインの下のpomファイルから削除します。それが動作します

<executions>
    <execution>
        <goals>
             <goal>repackage</goal>
        </goals>
    </execution>
</executions>

3

私の場合、スコープが<scope>test</scope>。としての依存関係を使用していました。これにより、開発時にクラスが使用可能になりましたが、コンパイル時にこのメッセージが表示されました。

<scope>provided</scope>問題を解決するためにクラススコープを回します。


2

Java 7、maven 2.2.1を使用していて、同じエラーが発生した場合でも<scope>tests</scope>、pomから削除して使用しました

mvn clean -DskipTests=true install Mavenバージョンをアップグレードせずに、プロジェクトを正常にビルドできます。


「mvnclean-DskipTests = true」インストールは魔法のコマンドです!共有するためのThx。(ところで、<scope>テスト</ scope>には触れませんでした)
Eta

1

作業スペース内の他のプロジェクトに依存していて、これらのプロジェクトが適切にビルドされていない場合、このようなエラーが発生する可能性があります。最初にそのような依存プロジェクトを構築してみてください、それは役立つかもしれません


0

これはMavenの機能ではありません。これはコンパイラの機能です。よく見てください。あなたが探している情報は、おそらく次の行にあります。


同じエラーが発生していました。その後のエラーにより、プロジェクトから欠落している依存関係の名前が示されました(この場合はorg.apache.poi.xssfライブラリクラス)。
ジョン

0

解決策:@コンポーネントをビルドする前に(mvn clean installを使用)。プロジェクト全体を一度ビルドして、コンポーネントを再度ビルドします

理由:
このエラーが何度も発生します。ほとんどの場合、コンポーネントを単独でビルドしようとします(他の場所で変更を加えていないため)。

そうですが、最近ダウンロードされたその余分なjarは、サードパーティ(コンポーネント内)によって行われた変更の影響を受けている可能性があります。プロジェクト全体に完全なmvnクリーンインストールを行うと、何度も節約できました


-1

私の推測では、コンパイラは無効な注釈について不平を言っています。注釈の配列の最後にあるコンマのように、Eclipseがすべてのエラーを表示するわけではないことに気づきました。しかし、標準javacはそうします。


それが不平を言っている行はfakeThing = new JPanel()です。これは、javacが「fakeThing」を表示する標準の「シンボルが見つかりません」エラーです。Mavenはそれを表示していません。
mattg 2013年

-1

プロジェクトでMavenインストールを実行しようとすると、EclipseSTSで同様の問題が発生していました。そのプロジェクトとそれらの依存関係が指すプロジェクトのpom.xmlファイルの依存関係のいくつかのバージョンを変更しました。変更したすべてのプロジェクトでMavenインストールを実行してから、元のプロジェクトで再度installを実行することで、問題を解決しました。


-1

Mavenでも同じ問題が発生しました。私の問題は、mavenが異なるケース名でフォルダーを生成していたことでした。.service.MyFileを期待していましたが、ターゲットフォルダーではService / MyFileであり、Javaでは大文字と小文字が区別されます。見つけるのに数時間かかりました。チェックすることをお勧めします。


-1

通常、このエラーは、コンパイルコードのバージョンが記述されたコードのバージョンと異なる場合に表示されます。たとえば、1つのクラスにメソッドAがあるxxx-1.0.0.jarに依存するコードを記述しますが、xxx-1.1.0.jarではメソッドがBに変更されています。xxx-1.1.0.jarを使用してコードをコンパイルすると、エラーが表示されます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.