- - PR -
CactusテストでNoClassDefFoundErrorが出る
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-08-24 16:40
いつもお世話になっています。
Maven+Cactusでサーブレットのテストをやっているのですが、 コンパイル後にもかかわらずテストで NoClassDefFoundErrorが出ます。訳がわかりません 実行環境:Windows XP SP2, Tomcat4.1.31, maven-1.0.2 eclipse2.1 jarファイル commons-beanutils-1.7.0.jar 長くなるのでproject.properties, project.xml, およびテストコード・被テストコードは別ページにアップしてます http://www5.ocn.ne.jp/~j2sdk/report/maven_files.html http://www5.ocn.ne.jp/~j2sdk/report/code.html siteゴール使用により出力される報告は以下の通りです testCallView Error 0.28 Message: org/apache/commons/beanutils/DynaProperty StackTrace: java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaProperty at junitbook.servlets.TestAdminServlet.createCommandResult(TestAdminServlet.java:20) at junitbook.servlets.TestAdminServlet.testCallView(TestAdminServlet.java:43) at ... グーグル検索したところ同様のエラーにあった外人さんがいるようで、 そのページに書いてあった [Tomcatインストールフォルダ]/commons/lib以下に最新のcommons-beanutils.jarを入れる、 という方法も試して見ましたが、Tomcat自体は起動するんですが、 mave cactus:testを実行するとテストが途中でフリーズしました。 マジで困ってます。よろしくお願いします | ||||
|
投稿日時: 2005-08-24 17:55
Cactus を使わない場合はエラーが発生せず正常に動作するということでしょうか?
もし試していないようでしたら切り分けのためCactus を使わないケースで現象が発生するか試してみましょう。 また、「フリーズ」と聞くとNoClassDefFoundErrorとは別の現象が発生しているように聞こえます。 問題は「フリーズ」(応答がなくなる)ではなくエラーなんですよね? [ メッセージ編集済み 編集者: インギ 編集日時 2005-08-24 17:56 ] | ||||
|
投稿日時: 2005-08-25 00:26
ご返答ありがとうございます。
>切り分けのためCactusを使わないケースで現象が発生するか試してみましょう 早速試してみました。 といってもAdminServlet.classは問答無用でRuntimeExceptionをスローする仕様 なので、DynaPropertyクラスを使うMockAdmin.classを作り、Tomcat上で動くか どうかやってみたところ、予想に反してNoClassDefFoundErrorがスローされました。 (ぼくは設定に問題があると思ってました) そこで先ほど書いたとおり、 [TOMCATインストールフォルダ]/common/lib にcommon-beanutils.jarをコピー したところ、Tomcat上ではうまく動作しました。 (証拠写真:http://www5.ocn.ne.jp/~j2sdk/report/proof.jpg) ところがやはりmaven cactus:testを実行したところ、テスト途中でフリーズする ようになります。これは明らかに [TOMCATインストールフォルダ]/common/lib にcommon-beanutils.jarをコピー したことが原因です(削除すると正常にテストできますので) ちなみにこの画面のまま動かなくなります (証拠写真:http://www5.ocn.ne.jp/~j2sdk/report/prompt.jpg) >「フリーズ」と聞くとNoClassDefFoundErrorとは別の現象が発生しているように聞こえ>ます。 DynaPropertyに対するNoClassDefFoundErrorを回避するために TOMCAT_HOME/common/lib にcommon-beanutils.jarをコピーすると、 maven cactus:test を実行したときにフリーズする(テストが中断する) とご理解ください。 なお、これは参考書「JUnit In Action」上のサンプルコードであり、私は テストコード作成の勉強をしてます。つまりAdminServletをTomcat上で 動かすのが目的ではなく、テストを成功させるのが目的です。 長くなりましたが、ご教授よろしくお願いします | ||||
|
投稿日時: 2005-08-25 02:51
なるほど。つまりCactusに依存する現象ということですね?
#ちょっと定義がはっきりしない用語が突然たくさんでてきてるのでうまく理解できていませんが・・・ >maven cactus:test を実行したときにフリーズする(テストが中断する) しつこいですが、フリーズというのはプロセスやスレッドがなんらかの処理中に停止している状態のことを言います。 エラーが発生して処理が終わってしまうのはフリーズとは言いません。混同してつかうとかなり誤解を招きますので気をつけましょう。 | ||||
|
投稿日時: 2005-08-25 14:29
>しつこいですが、フリーズというのはプロセスやスレッドがなんらかの処理中に停止し>ている状態のことを言います。
>エラーが発生して処理が終わってしまうのはフリーズとは言いません。混同してつかう>とかなり誤解を招きますので気をつけましょう。 あなたは言葉の理解力に欠けているようですね。 人に「〜しましょう」なんていう前に自分に問題があることに気づきましょう。 また、理解の助けのために画像リンクも張ってますが、それすら見ずに理解できない なんていうのも、人間としてどうなんでしょうか。 そもそも、理解できないのならレスしなくていいのでは? 不快なだけですよ。 | ||||
|
投稿日時: 2005-08-25 16:47
売り言葉に買い言葉になってしまいますが、AdminServlet や MockAdmin は"JUnit In Action"を読まないと分からないものと思い細かいリンクなどは確認していません。たぶんスクリーンショットをみてもその中身はわからないですよね?
また、私はちょっと複雑そうな問題は普段からダイレクトに回答する気もありません。 むしろヒントなり切り分けかたを示すことで問題を解決の手助けをしたり、自分が知らない現象でももっと詳しい人の意見が出やすい方向にもっていくよう心がけています。その上で現象を示すキーワードは重要なので言葉の定義について細かい突っ込みをしました。 ひとまずこのスレッドにはレスしないようにします。人間としては間違っていないつもりですが、お役に立てず、また不快な思いをさせたようで申し訳ありません。 [ メッセージ編集済み 編集者: インギ 編集日時 2005-08-25 17:00 ] | ||||
|
投稿日時: 2005-08-25 18:29
そういうことではなく、「フリーズ」している状況をスクリーンショットで示されている んですよ。「フリーズってどういうことだかわかってないのではないか」という思い込みが ありませんか? | ||||
|
投稿日時: 2005-08-25 18:39
「レスしないように」と言った直後ですが、当方で色々勘違いしていたようなので早速再開させていただきます
ukさん、フォローありがとうございます。スクリーンショットを見てみました。 よくよく読み返してみたら「NoClassDefFoundError」と「フリーズ」と実際両方発生しているんですね? 私の早とちりでした。申し訳ありません。 #いつもナナメ読みです レスするからにはもうすこししっかり読むようにします 「フリーズ」しているのであればスレッドダンプをとってどこで止まっているか解析してみてはいかがでしょうか? [ メッセージ編集済み 編集者: インギ 編集日時 2005-08-25 18:41 ] |