2009-08-21 157 views
15

私はすべてのソースフォルダに独自の関連する出力フォルダがあるEclipseプロジェクトを持っています。/classesの代わりに/ eclipse-classesと呼ばれます。junitテストに使用するEclipseクラスパスを設定するにはどうすればよいですか?

私はフォルダ持っているのであれば: のsrc /メイン/ javaの(典型的なMavenのもの) 対象フォルダである:リソースのための ターゲット/日食-クラス

と同様など

をこれがそうです(つまり、eclipseはこれらのフォルダの中にある.classファイルを生成しますが)すべてのJunitテストを実行すると、「クラスが見つかりません」という例外がスローされます。私は組み込みのEclipseテストランナーを使用してJUnitを実行しています(つまり、クラスを右クリックし、 "run as"、 "Junit test")。

/eclipse-classesフォルダを/ classesにコピーすると成功します。これはeclipseが/ classesを使用していることを意味しますが、変更する設定オプションが見つかりません。何がeclipseが/ classesフォルダをまだ使っているのかを知る方法はありますか?

(おそらく関連、私もm2eclipseプラグインを使用しています)

リッチ売り手の答えに触発されたいくつかの追加情報: Mavenのは、リソースの変更に次のことを実行するように設定されています

process-resources resources:testResources 

ながらこれは有用なことを何もしません(間違ったディレクトリにコピーします)。リソースは正しい場所に置かれるので、問題はありません。

.classpathエントリは大丈夫です。そこネスティングリッチが投稿何よりも少し深く行くので、Mavenのサブプロジェクトの束だが、そうでない場合は、この行を除いてまったく同じです:

<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> 

私たちは1つを必要としないかもしれないと思うが、それは気圧何かを傷つけていません。

edit2:さらにテストすると、eclipseが/ eclipse-classesフォルダと/ classesフォルダの両方でクラスファイルを生成していることがわかります。 m2eclipseはビルド時に自動的にバックグラウンドでmvn buildを実行しているようですが、これを無効にする方法は見つけられません。誰も他のアイディアを持っていなければ、私はm2eclipse開発者に連絡しようとします。

+0

"サーバー"と "クライアント"のソースフォルダでは、 "サーバークラス"と "クライアントクラス"が出力フォルダとして使用されますか? –

+0

JUnitはどのように起動しますか? JUnit Eclipseプラグインを使用していますか、またはMavenからユニットテストを開始しますか? – Dirk

+0

質問文に回答を追加しました。 – wds

答えて

7

m2eclipseを使用すると、Eclipseプロジェクトの設定がプラグインによって上書きされます。ソリューションについては、this articleを参照してください。

この理由は、m2eclipseの開発者は関係なく、あなたがEclipseで設定するものを、target/classestarget/test-classesはないようにコンパイルされたクラス用のフォルダを強制するように、いくつかのMavenプラグインは、target/の外にあるディレクトリに対応できないということです。

プロファイルを使用すると、Eclipse用に異なるフォルダを使用できます。それでも、maven(およびそのプラグイン)の出力フォルダを変更することは賢明ではありません。

+0

私はそうは思わない、日食コンパイラは別々に定義されたフォルダにクラスを出力しているだけです。だから、Eclipseコンパイラが出力フォルダでピックアップしている、ランタイムクラスパスが壊れている。増分コンパイルを壊す可能性があるので、mavenがそれらの.classファイルを生成することを担当したくありません。 – wds

+0

また、上記の解決策は、eclipseが使用されているときに.classファイルをどこか別の場所に置くようにmavenを構成するようになっているので、eclipseはtarget/classesを使用できます。私は私が推測する反対側からそれに近づいています.Mavenを回避するためにEclipseを設定する。これはもっと論理的なアプローチ(プロジェクト.pomを汚染しない)のようですが、junitプラグインが何らかの形でビルドパスを使用してランタイムクラスパスを作成している場合に限ります。 – wds

+0

これは、maven-eclipse-pluginからm2eclipseに移動して以来、私のクラスパスの問題を修正しました。投稿していただきありがとうございます。 – JamesC

4

Eclipse JUnitインテグレーションには特別なクラスパス設定はありません。クラスパスで定義されている出力フォルダを処理し、それらのフォルダにコンパイルされたすべてのクラスを見つける必要があります。 .classpathファイルに何か不具合があり、JUnitが混乱することがあります(デフォルトでは、.classpathファイルはプロジェクトのルートにあります)。

あなたの記述に基づいて、以下のようなエントリが表示されることが期待されます(デフォルトの出力フォルダとsrc/main/javaとsrc/main/resourcesのオーバーライドに注意してください)。そのためには、問題

<classpathentry excluding="**" kind="src" output="target/eclipse-classes" path="src/main/resources"/> 
<classpathentry kind="src" output="target/eclipse-classes" path="src/main/java"/> 
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> 
<classpathentry kind="output" path="target/classes"/> 

これは、ロングショットですが、それはまた、そのような場合にはMavenのクリーンは、あなたのプロジェクトに設定されていることかもしれ可能性がある場合、あなたのクラスパスは、著しく異なって見えるんクリーンゴールが実行されるたびにtarget/eclipse-classの内容が削除されるため、テストが実行される前にファイルシステムからテストが削除されます。プロジェクトプロパティ(alt-enter)を開いてMaven項目を選択すると、Mavenがどの目標を実行しているかを確認できます。


この部分はあなたの質問に直接答えませんが、とにかく便利です。 Eclipseの出力ディレクトリをMavenと同じにする傾向があり、Eclipse内で問題は発生しません(Mavenビルダーをプロセスリソースだけを実行してコンパイルしようとはしません)。

私がMavenビルドを行う場合、Mavenコンパイラは、変更されたクラス(クリーンが含まれている場合はすべてのもの)をビルドします。 Eclipseの後続の変更はインクリメンタルコンパイラによって検出され、処理され、すべて正常です。私は自動的にビルドをオフにしますが、それは私を悩ますだけで、MavenとEclipse fghtの両方がオフになっている可能性があります。

+0

私はかなりmavenがプロセスリソースだけを実行していると確信しています。私は月曜日に残りの部分を試し、あなたに戻ってきます。 – wds

+0

もう少し情報を追加しましたが、それを説明するかもしれない何も見ません... – wds

+0

最終的に私はあきらめて、同じ出力フォルダを使用するようにmavenとeclipseを設定しました。それは非常に時折壊れますが、私はそれがGood Enough(TM)だと思います。 – wds

1

私はEclipseプロジェクト設定を生成するためにmaven-eclipse-pluginを使用しています。これに対して別のプラグインを試してみてください。プラグインを構成してEclipseプロジェクトを構成し、クラス用の完全に別個の出力ディレクトリを使用するようにしました(下記参照)。これはプロジェクトのルートに関連しているため、ターゲットの外にあります。

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-eclipse-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <outputDirectory>eclipse_build</outputDirectory> 
     </configuration> 
    </plugin> 

これは、MavenとEclipseの両方ですぐにテストを実行できることを含めて、私にとって素晴らしい動作です。

0

mvn eclipse:eclipseを実行してください。これは私の問題を修正しました

関連する問題