1. 無料アクセス解析

crossroad's Blog

Javaを中心にした技術ネタなど。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Maven2 + WTP でJUnitテスト

Meven2 + WTP の組み合わせで、JUnitテストを書くと、APサーバが起動しなくなる問題が。

【条件】
 ①Eclipse で、WTP(Web Tools Platform)を使って、Webアプリ開発をしている。

 ②ビルドツールとしてMaven2を使用しており、pom.xmlで以下のようにJUnitを"テスト時のみ"クラスパスに通している。
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.2</version>
    <scope>test</scope> <!-- スコープにtestを指定している! -->
  </dependency>

 ③ソースコードの配置場所と、コンパイルされたclassファイルの出力先は、Maven2の仕様にしたがっている。
  ・アプリのソースコード src/main/java → classファイルは target/classes に出力
  ・JUnitのソースコード src/test/java → classファイルは target/test-classes に出力


【現象】
 ・WTPからサーバを起動すると、
   NoClassDefFoundError: junit/framework/TestCase
  が発生し、Webアプリが実行できない。

 ・作成したJUnitテストクラスを削除すると、実行できるようになる。


【原因】
 直接的な原因は2つ。
 ・WTPが、Webアプリ実行時に JUnitテストクラスをロードしてしまっている。
 ・JUnitライブラリのスコープが "test" なので、Webアプリ実行時にはクラスパスに追加されていない。

 つまり、JUnitテストクラスをロードしたが、JUnitライブラリがクラスパス上にないので NoClassDefFoundError が発生する、と言う理屈です。


【対処】
 対処としては、WTPにJUnitテストクラスをロードさせないようにします。
 。。。が、Eclipse GANYMEDEでは、そのような設定をする操作は見つけられなかったので、
 WTPの設定ファイルを直接編集してしまう。

 プロジェクトルート/.settings/org.eclipse.wst.common.component を開くと、
 以下のようになっています。

 1: <?xml version="1.0" encoding="UTF-8"?>
 2: <project-modules id="moduleCoreId" project-version="1.5.0">
 3:  <wb-module deploy-name="example">
 4:   <wb-resource deploy-path="/" source-path="/src/main/webapp"/>
 5:   <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
 6:   <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
 7:   <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/java"/>
 8:   <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/resources"/>

 9:   <property name="context-root" value="example"/>
 10:   <property name="java-output-path"/>
 11:  </wb-module>
 12: </project-modules>

 この7行目と8行目が余計なので削除すると、無事にWebアプリが起動するようになります。

 別の方法としては、前出のpom.xmlでスコープをcompileにしても起動はするが、
 本来実行時には必要のないライブラリが組み込まれてしまうことになるので、よろしくないです。


しかし、Maven2 + WTP + JUnitテスト と言えば、良く使われている組み合わせと思うのですが、
なぜかWeb上にも同様の現象についての情報はないようで。。。おかしいなぁ。

関連記事
スポンサーサイト
  1. 2008/07/17(木) 22:22:43|
  2. ソフトウェア開発 Java
  3. | トラックバック:0
  4. | コメント:0
<<Eclipse F11キーの挙動を変えてサクサク開発 | ホーム | Eclipse GANYMEDE で Jadclipse が動かない>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://bagineer.blog59.fc2.com/tb.php/147-96539aeb
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

crossroad

Author:crossroad
関西在住。男。
フリーランスのソフトウェアエンジニア。
エレキベース(Rock&Roll)とお酒が好物でございます。

カテゴリー

タグリスト

Java F1 フリーランス ベーシスト HARRY TheStreetSliders iPhone FX お酒 Seasar Maven eclipse Wicket マイホーム 野球 プロジェクトファシリテーション Rails Ruby UML お店 ソフトウェア Tomcat S2Flex2 jsf Teeda Eclipse タグライブラリ ajax タスク europa mylyn trac 

ブログ内検索

最近の記事

最近のコメント

最近のトラックバック

カレンダー

07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

月別アーカイブ

全ての記事を表示する

全ての記事を表示する

Twitter


RSSフィード

リンク

このブログをリンクに追加する

アクセスカウンタ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。