これは非常に単純な質問であり、おそらく私が知らない場所に設定されていますが、Googleはこの質問に対して特に役に立たず、コンパイルエラーメッセージの変更方法ではなく、コンパイルエラーに関する結果を示しています。
Mavenを使用してプロジェクトをビルドすると、おおよそ次の形式のエラーメッセージが表示されます。
[エラー] /path/to/source/Main.Java:[13,8]エラー:シンボルが見つかりません
Antまたはjavacでビルドすると、実際にはエラーメッセージに見つからないシンボルが表示されます。 mavenは行番号と文字の位置を教えてくれますが、実際のシンボルを表示する方が便利です。上記の行は、「シンボルを見つけることができません」エラーごとに指定された唯一の行です。シンボルを示す上または下の行はありません。その情報を伝えるためにMavenを取得する何らかの方法が必要だと思いますが、それが何であるかはわかりません。 -eオプションを試しました。mvnがそれを使用するように言ったので、実際のシンボルではなく、エラーの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] -------------------------------------------------------------
見つからないシンボルは、SoundEngineFilePanelではなく、「fakeThing」および「fakeThing2」です。
これは、Mavenコンパイラプラグインの バグ で、JDK7に関連すると思います。 JDK6で正常に動作します。
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>
私の場合、問題は新しいクラスを追加したため再構築されなかった子jarにあり、その子jarのpom.xmlは、(<parent>
タグを使用して)失敗したpom.xmlに子と親の関係として関連していませんでした。そこで、エラーがなくなった後、子jarを再構築しました。
同じ問題がありました。その理由は、Maven依存関係を介して2つのJARファイルが追加されなかったため、mvn compile
を実行すると、コンソールにエラーエラーが表示されたためです。
シンボルが見つかりません、クラス...」。
修正するには:
mvn compile
を実行しますJava 7、maven 2.2.1を使用していて、同じエラーが発生した場合でも、<scope>tests</scope>
をPOMから削除して使用しました
mvn clean -DskipTests=true install
は、Mavenバージョンをアップグレードせずにプロジェクトを正常にビルドします。
私の場合、<scope>test</scope>
としてスコープされた依存関係を使用していました。これにより、開発時にクラスが使用可能になりましたが、コンパイル時にこのメッセージが表示されました。
<scope>provided</scope>
のクラススコープを回して、問題を解決しました。
これは、この問題、つまりPOMファイルで定義した再パッケージ化が原因で発生します。
これをmavenプラグインの下のpomファイルから削除します。それが動作します
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
これはMavenの機能ではありません。それはコンパイラの機能です。よく見てください。探している情報は次の行にある可能性が高いです。
通常、このエラーは、コンパイルコードのバージョンが記述コードのバージョンと異なる場合に表示されます。たとえば、1つのクラスにメソッドAがあり、xxx-1.1.0.jarでメソッドがBに変更されているというxxx-1.0.0.jarに依存するコードを記述します。 xxx-1.1.0.jarでコードをコンパイルすると、エラーが表示されます。
ワークスペースの他のプロジェクトに依存しており、これらのプロジェクトが適切にビルドされていない場合、このようなエラーが発生する可能性があります。そのような依存プロジェクトを最初に構築してみてください。
私の推測では、コンパイラは無効な注釈について不平を言っています。アノテーションの配列の最後にあるコンマのように、Eclipseはすべてのエラーを表示しないことに気付きました。しかし、標準のjavac
はそうです。
解決策:コンポーネントをビルドする前に(mvn clean installを使用して)。プロジェクト全体を一度ビルドし、コンポーネントを再度ビルドします
なぜSO:
このエラーが何度も発生します。ほとんどの場合、コンポーネントを単独でビルドしようとします(他で変更を加えていないため)。
右、しかし、最近ダウンロードされたその余分なjarは、サードパーティ(コンポーネント内)によって行われた変更の影響を受ける可能性があります。プロジェクト全体で完全なmvnクリーンインストールを行うと、何度も節約できました
Mavenでも同じ問題が発生しました。私の問題は、Mavenが異なるケース名でフォルダを生成していたことでした。 .service.MyFileを期待していましたが、ターゲットフォルダーではService/MyFileであり、Javaは大文字と小文字が区別されます。調べるのに数時間かかりましたので、ぜひチェックしてみてください。
プロジェクトでMavenインストールを実行しようとすると、Eclipse STSで同様の問題が発生していました。そのプロジェクトとそれらの依存関係が指すプロジェクトのpom.xmlファイルの依存関係のバージョンをいくつか変更しました。変更したすべてのプロジェクトでMavenインストールを実行し、元のプロジェクトでインストールを再度実行することで解決しました。
おそらく、IDE大文字と小文字を区別するプロパティを確認する必要があります。私は同じ問題を抱えていて、Ideaの大文字と小文字を区別することで解決しました(私のファイルシステムは大文字と小文字を区別します): https://confluence.jetbrains.com/display/IDEADEV/Filesystem+Case-Sensitivity+Mismatch