質問: Maven の multi module project で eclipse プラグインによって eclipse へプロジェクトを import した際には、モジュール間の dependency は eclipse 上で project でのビルドパス追加という形で解決されます。 しかし、その形ですと、依存しているモジュールは、依存先モジュールの`src/test/*`フォルダまでビルド・コンパイル時に検索してしまい、これは `mvn compile` や`mvn test` での挙動と異なってしまいます。 他のモジュールを依存しているモジュールにおいて、依存先の `src/test/*` を検索しないようにすることはできないでしょうか。 --- これで何が問題かというと、例えば次の挙動が挙げられます。 * リソースをクラスパスから検索する系の処理が、該当モジュールにて記述されている場合などに、本来は検索して欲しくない、依存先モジュールの`src/test/resource` を検索してしまう。 eclipse 上でのデバッグが、それゆえに困難になったりする。
回答: Eclipse ProjectとMaven Moduleという別のものを1対1で対応付けようとすること自体に無理があるので、どこかで妥協する必要があると思います。 以下、 プロジェクトX <--[依存]-- プロジェクトY というような関係がある場合の妥協案について考えてみました。 (ハイブリッドで運用する方法もありますし、どれが最適かは適用しようとしているプロジェクトの状況にも依存するでしょう。) 案A. Maven側に寄せる ### 案A.1. Eclipseプロジェクト同士で依存関係を設定しない *Eclipseプロジェクトとして依存関係を設定しているためにそのような問題が発生しているのであって、逆に言えば依存関係を設定しなければ問題は発生しない。* pom.xml インポート時に Advancedオプションの **Resolve Workspace projects チェックを外す**(日本語版だと「ワークスペース・プロジェクトから依存関係を解決」のようです)ことで実現できます。 プロジェクトXに対する依存関係はMavenの(ローカル)リポジトリで解決することになります。 ### 案A.2. テスト実行はMavenのみで行う *Eclipse設定はあくまでIDEで開発する上での利便性のためのものであり正確なものではない、と割り切って差異を許容する。* Eclipseが認識できないgoalを持ったMavenプラグインを使用する場合など、どっちみち同じようにはいかないことは他にもあります。 今回の場合ですと、リソースに依存するこのクラスのテストはEclipse上では上手く行かないのでMavenで実行すること、と取り決めておくことになるでしょう。 案B. Eclipse側に寄せる ### 案B.1. 本体とテストとを別Moduleとする *Eclipse的には本体とテストが同じプロジェクトに同居していることに問題があるので、「プロジェクトXのテスト」Mavenモジュールを新たに作り、 プロジェクトX <--[依存]-- プロジェクトY プロジェクトX <--[依存]-- プロジェクトXテスト とし、EclipseプロジェクトとMavenモジュールを1対1で対応付ける。* Mavenモジュールとしては一般的ではないですが、プライベートなプロジェクトであり、かつEclipse依存度が高いのであればEclipseの流儀に合わせるのが楽では無いかと思います。 (その場合Maven化する必要があるのか、ということにもなりますが...) ### 案B.2. pom.xml設定とは異なる設定を別途Eclipseで設定する * *プロジェクトXでテストディレクトリのinclude設定を削除* * *pom.xmlには無いプロジェクトXテストプロジェクトをEclipseで作成しプロジェクトXのテストディレクトリをinclude* *のような設定をEclipse側で別途行う。* Eclipse依存度は高いがMaven化もしたい場合には、B.1.よりはこちらのほうが良いかと思います。 ただし、pom.xmlとEclipse設定が一部乖離するので管理は煩雑になるでしょう。 案C. その他 ### 案C.1. プロファイルでリソースディレクトリを切り替える *プロジェクトXのテストリソースディレクトリをダミーディレクトリにすげ替えるようなプロファイルをpom.xml上に作成しておき、プロジェクトYの開発時にはそのプロファイルを用いる。* pom.xmlにはEclipse用の設定が入り込むし、Eclipse上での開発時にもひと手間必要になるという点で両方に妥協してもらう案です。 プロファイル名をそれと分かるようにしておけば混乱もないでしょうし、m2e1.5.0以降であれば(でなければ Maven Profiles Managementを導入すれば)Eclipse上でのプロファイルの切換も以前ほど煩雑では無くなったので、無理筋では無いと考えます。