Eclipse 3.2+WTP 1.5+MavenでWicket開発環境を作成する
ここでは、Wicketの開発環境としてEclipse 3.2+WTP 1.5+Maven2を使った開発の
始め方を簡単に解説します。
Eclipse 3.2, WTP 1.5 , Tomcat 5.5, Maven 2の環境はセットアップ済みであることを前提にしています。Eclipse + WTP環境構築の方法は、以下のリンクを参考にしてください。
Maven2の導入は以下のリンクを参考にしてください。バイナリを任意のディレクトリに展開して(展開先)/binにPATHを通し、環境変数JAVA_HOMEを設定するだけです。
ここでは、
E:\work\wicketwtp\以下に開発環境を用意し、Eclipseのワークスペースが
E:\work\wicketwtp\workspaceにあるものとして説明をします。
EclipseワークスペースにM2_REPO変数を登録
まず、Eclipseでのビルド時にMavenのローカルリポジトリを参照できるようにM2_REPOというクラスパス変数を設定します。設定用の
eclipse:add-maven-repoが用意されているので、ワークスペースを
-Declipse.workspaceで指定して実行します。
E:\>mvn -Declipse.workspace="E:/work/wicketwtp/workspace" eclipse:add-maven-repo
(実際には一行で入力します)
これでEclipse上のクラスパス変数としてM2_REPOが設定されます。この操作はワークスペース毎に一度だけ実行すれば、再度実行する必要はありません。
プロジェクトディレクトリの作成とpom.xmlの編集
Eclipseワークスペースの下にプロジェクトディレクトリを作成します。ワークスペースに移動して、
archetype:createゴールを実行します。
E:\>cd e:\work\wicketwtp\workspace
E:\work\wicketwtp\workspace>mvn archetype:create -DgroupId=com.example -Dversion=0.0.1 -DartifactId=wicketapp1 -DarchetypeArtifactId=maven-archetype-webappプロジェクトディレクトリが作成され、その中にpom.xmlが作成されますので、pom.xmlを自分の用件にあうように編集します。
まず
wicketへの<dependency>を追加します。-①
また、JDK 1.5でコンパイルするために
maven-compiler-pluginへ設定追加を行います。-②
maven-archetype-webappで作成したワークスペースはデフォルトではsrc/main/resourcesのみがソースフォルダとして登録されるので、これをsrc/main/javaに変更します。-③
最後に、
<resources>を追加して、リソースのフィルタを変更しています。-④
これはWicketの場合、ソースフォルダにHTMLファイルを作成し、それがWARのclasses/にコピーされる必要があるためです。(デフォルトではソースフォルダにあるファイルは、コンパイル後のclassファイルのみコピーされ、HTMLファイルはコピーされない)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>wicketapp1</artifactId>
<packaging>war</packaging>
<version>0.0.1</version>
<name>wicketapp1 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency> <!-- 1 -->
<groupId>wicket</groupId>
<artifactId>wicket</artifactId>
<version>1.2.4</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/main/java</sourceDirectory> <!-- 3 -->
<finalName>wicketapp1</finalName>
<plugins> <!-- 2 --><plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
<resources> <!-- 4 --><resource>
<filtering>false</filtering>
<directory>src/main/java</directory>
<includes>
<include>**</include>
</includes>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
</build>
</project>(
太字の部分が追記した箇所です。また上記のpom.xmlファイルは
ここからダウンロード可能です)
プロジェクトをEclipseからインポートできるようにする
プロジェクトディレクトリの用意が出来たので、eclipse:eclipseゴールを使用してEclipseからインポート可能にします。まず
プロジェクトディレクトリに移動して、
-Dwtpversion=1.5と-DdownloadSources=trueを付けてeclipse:eclipseゴールを実行します。
E:\work\wicketwtp\workspace>cd wicketapp1E:\work\wicketwtp\workspace\wicketapp>mvn -Dwtpversion=1.5 -DdownloadSources=true eclipse:eclipse(もしうまく動かない場合は、
-DeclipseProjectDir="E:/work/wicketwtp/workspace"でEclipseのワークスペースを指定してみてください)
eclipse:eclipseを実行すると、必要なファイル(wicket本体など)がEclipseプロジェクトから参照可能なようにセットアップされます。必要なファイルがローカルリポジトリに無い場合、自動的にダウンロードされます。また
-DdownloadSource=trueを付けていますので、ソースもダウンロードされ、これもEclipseから参照可能なように設定されます。
次に、src\main\javaディレクトリを作成します。(デフォルトではsrc\main\resourcesしか作成されないため)
E:\work\wicketwtp\workspace\wicketapp1>mkdir src\main\java
プロジェクトのインポート
Eclipseを起動し、作成したプロジェクトをインポートします。
メニューのファイル⇒インポートを選択します。
「既存プロジェクトをワークスペースへ」を選択して「次へ」を押します。
「ルート・ディレクトリーの選択」で、作成したワークスペース(
E:\work\wicketwtp\workspace\wicketapp1)を指定し、「終了」を押します。インポート後、初回のみダウンロードした"http://java.sun.com/dtd/web-app_2.3.dtd"へのライセンスの同意が求められますので、「同意します」を押します。

先ほど作成した
src/main/javaフォルダがEclipseのソースフォルダとして登録されているはずです。src/main/resoucesはソースフォルダになっていないので、必要であればソースフォルダとして登録します。src/main/resoucesをパッケージ・エクスプローラー上で右クリックし、「ビルド・パス」⇒「ソース・フォルダーとして使用」を選択すれば登録できます。
プロジェクト全体は右図のようになっているはずです。wicketや、wicketが依存するcommons-logging等がソースコードと共にプロジェクトから参照可能なように設定されています。
アプリケーションの作成
単純に現在時刻を表示するだけのアプリケーションを作成して、動作確認を行います。まず、
mvn archetype:createが作成した
src/main/webapp/index.jspは不要なので削除します。
先にパッケージ名とアプリケーションクラスの名前を決めておく必要があります。ここではパッケージ名を
com.example.wicket、アプリケーションクラスを
Applicationとします。
web.xmlファイルを編集して、Wicketのサーブレットクラスとアプリケーションクラスを定義します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Wicket Application</display-name>
<context-param>
<param-name>configuration</param-name>
<param-value>development</param-value>
</context-param>
<servlet>
<servlet-name>wicketapp</servlet-name>
<servlet-class>wicket.protocol.http.WicketServlet</servlet-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>com.example.wicket.Application</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>wicketapp</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>(上記のweb.xmlファイルは
ここからダウンロード可能です)
あとは決めたパッケージ以下にクラスやHTMLテンプレートを作成していくだけです。HTMLテンプレートは対応する
クラスと同じパッケージ(ディレクトリ)に作成する必要があります。src/main/webapp以下に作成しても動作しないので注意が必要です。
ここでは以下のように作成しました。
Application.java (
ダウンロード)
======================================================================
package com.example.wicket;
import wicket.protocol.http.WebApplication;
public class Application extends WebApplication {
@Override
public Class getHomePage() {
return Home.class;
}
}
======================================================================
Home.java (
ダウンロード)
======================================================================
package com.example.wicket;
import java.util.Date;
import wicket.markup.html.WebPage;
import wicket.markup.html.basic.Label;
public class Home extends WebPage {
private static final long serialVersionUID = 1L;
public Home() {
add(new Label("time",new Date().toString()));
}
}
======================================================================Home.html (
ダウンロード)
======================================================================
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Current Time</title>
</head>
<body>
現在の日時は<span wicket:id="time">00:00:00</span>です。
</body>
</html>
======================================================================
WTPの機能を使ってTomcat上で起動する

WTPに登録してあるTomcat上で作成したアプリケーションを起動します。サーバビューを表示し、Tomcatを右クリック⇒「プロジェクトの追加および除去」を選択し、作成したwicketapp1を登録します。
登録できたら、サーバービューのデバッグボタン、もしくは実行ボタンを押しTomcatを起動します。起動後ブラウザから
http://localhost:8080/プロジェクト名にアクセスする事でアプリケーションを実行します。
実行すると以下のように現在の時刻が表示されます。リロードすると時間が更新されるのが確認できます。
開発中は基本的にTomcatを立ち上げっぱなしで問題ありません。HTML,クラスの変更はTomcatのリスタート無しで動的に反映されます。
補足
ロギングについて
上記の方法ではロギングの設定がされていないので、情報がほとんどコンソールに出力されません。src/main/java以下に
commons-logging.propertiesと
log4j.propertiesを置く事でログが出力されるようになります。
commons-logging.propertiesには
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLoggerとだけ書いてlog4jにロギングを任せます。
log4j.propertiesには、最低限以下のような設定が必要です。
log4j.rootLogger=DEBUG,Stdout
log4j.appender.Stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout
log4j.logger.org=INFO
log4j.logger.wicket=INFOwarの作成
WTPの機能としてwarファイル作成機能があるので、それを使うと簡単にwarファイルが作成できます。プロジェクトを右クリック⇒エクスポートからwarを選択する事でwarが作成できます。
また、Mavenを使って、コマンドラインから
mvn packageを実行することでもwarが作成できます。この場合は\target\ディレクトリ以下にwarファイルが作成されます。
WTPのHTMLエディタでwicket:idへの警告が出る場合
WTPのHTMLエディタを使ってWicketのHTMLテンプレートを作成していると、
「属性名 (wicket:id) が未定義です。」という警告が出る場合があります。そのままにしておいても特に問題はありませんが、警告を消したい場合はwicketというネームスペースを適当に定義する事で警告を回避できます。(これが正しい方法ではないと思うのですが、他に良い方法が分からないのでこうしています)
WTPでHTMLファイルを作成する場合は、XHTMLのテンプレートに以下のネームスペースを追加したテンプレートを登録しておくと便利だと思います。
例)
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.sourceforge.net/ ">