m2e プラグインで eclipse Kepler を使用しており、maven プロジェクトを変更してコンパイルしたいと考えています。最初に で Maven プロジェクトに変換しましたConfigure -> Convert to maven project
が、まだ多くのインポートが不足していました。プロジェクトを使用Run as... -> Maven install
するとコンパイルされます。
不足しているインポートを修正するにはどうすればよいですか?
m2e プラグインで eclipse Kepler を使用しており、maven プロジェクトを変更してコンパイルしたいと考えています。最初に で Maven プロジェクトに変換しましたConfigure -> Convert to maven project
が、まだ多くのインポートが不足していました。プロジェクトを使用Run as... -> Maven install
するとコンパイルされます。
不足しているインポートを修正するにはどうすればよいですか?
プロジェクトを更新するように m2e に指示します: プロジェクトのコンテキスト メニュー / Maven / プロジェクトの更新...
その後、m2e は POM を再度読み取り、クラスパスを更新して、プロジェクトを再度ビルドします。
.classpath
ファイルにこれがあることを確認してください:
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
注: 実際の構文は、使用する m2e バージョンによって若干異なる場合があります。
もう 1 つの一般的な落とし穴はスコープprovided
です。
provided
これは によく似compile
ていますが、JDK またはコンテナーが実行時に依存関係を提供することを期待していることを示しています。たとえば、Java Enterprise Edition 用の Web アプリケーションを構築する場合、サーブレット API および関連する Java EE API への依存関係を提供範囲に設定します。これは、Web コンテナーがこれらのクラスを提供するためです。このスコープは、コンパイルおよびテスト クラスパスでのみ使用でき、推移的ではありません。
最後の部分に注意してください。not transitive
これは、「I need X:Y:Z, scope provided」というPOM Aに依存していることを意味します。プロジェクトにはこの依存関係が表示されますが、クラスパスにはまったくありません。
これを修正するには、依存関係を同じスコープ ( provided
) でプロジェクトにコピーします。