Wicket+Maven2+EclipseによるWicket開発の始め方
(このページの内容は
Wicket開発環境の構築の続きです)
ここでは、Wicketでの開発にMaven2+Eclipseを使う場合の方法を説明します。
説明には、
ここで作成した開発環境を使っており、1つのディレクトリ以下にeclipse、jetty、eclipseのワークスペースがまとめられた環境を使っています。
Mavenによるプロジェクトディレクトリの作成
まず、Mavenの規約にそったプロジェクトディレクトリを作成します。コマンドプロンプトを開いて、Eclipseのワークスペースにディレクトリに移動し、
E:\>cd E:\work\wicket\workspace
以下のように、archetype:createゴールを実行します。下記のgroupId,version,artifactIdは自分の環境にあうように変更してください。
E:\work\wicket\workspace>mvn archetype:create -DgroupId=com.example -Dversion=0.0.1 -DartifactId=wicketapp1 -DarchetypeArtifactId=maven-archetype-webapp
(実際には一行で入力します)
| groupId | アプリケーションを作成する組織、個人を特定するユニークなID。通常、パッケージ名を指定します。 リポジトリ上に公開する場合は、他のグループIDと被らないようにする必要がありますが、個人で作成する場合は適当な名前で問題ありません。 |
| version | 任意のバージョン番号です。後から変更できます。 |
| artifactId | 組織(groupId)内で作成するアプリケーションを識別する文字列。この名前でwarファイルが作成されます。 |
[INFO] Archetype created in dir: E:\work\wicket\workspace\wicketapp1
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
と表示されれば正しく作成されています。指定したarfifactIdと同じ名前のディレクトリが作成されるので、そこに移動します。
E:\work\wicket\workspace>cd wicketapp1
ディレクトリ内にはpom.xmlファイルが作成されています。pom.xmlはプロジェクト全体の依存関係などを記述するファイルです。そのpom.xmlを自分の用件にあうように編集します。ここでは以下のような追記を行いました。
まず
wicketへの<dependency>を追加します。-①
また、JDK 1.5でコンパイルするために
maven-compiler-pluginへ設定追加を行います。-②
③はソースフォルダをsrc/main/javaに明示的に指定しています。(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.5</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>上記の内容は
ここからダウンロードできます。
=========================================================補足:
もしmavenのcentralリポジトリに最新のWicketが無い場合は<project>タグ直下に以下のようにリポジトリを追加してください。こちらはWicketのリリースから間を置かずに最新版が置かれるようです。
<repositories>
<repository>
<id>wicket</id>
<name>Wicket repository</name>
<url>http://wicket.sourceforge.net/maven2</url>
</repository>
</repositories>
=========================================================
pom.xmlを編集したら、以下のよう
にeclipse:eclipseゴールを実行します。自動的に必要なjarファイルがダウンロードされ、eclipseプロジェクト内から正しく参照が設定されます。-DdownloadSources=true を付けることでソースコードもダウンロードされます。
E:\work\wicket\workspace\wickettest1>
mvn -DdownloadSources=true eclipse:eclipseこうして作成されたプロジェクトディレクトリには、(なぜか)Javaソースコードを保存するディレクトリが作成されていないので、Eclipseを起動する前に手動で作成しておきます。(必要なら
src\test\javaやsrc\test\respources等も作成します)
E:\work\wicket\workspace\wickettest1>mkdir src\main\java
Eclipseを起動する
プロジェクトディレクトリが用意できたので、Eclipseを起動します。起動したら、まずパースペクティブをJavaに変更します。
次に、作成したプロジェクトディレクトリをインポートします。メニューのファイル⇒インポートでウィザードを起動し、「既存プロジェクトをワークスペースへ」を選択します。
ルート・ディレクトリとして作成したプロジェクトディレクトリを指定し、「終了」をクリックします。

右図のようにインポートされます。もしこのようにsrc/main/javaがソースフォルダとなっていない場合(アイコンがフォルダアイコン+パッケージアイコンになっていない場合)、src/main/javaを右クリックし、ビルドパス⇒ソースフォルダとして使用を選択してください。(必要なら、同様にsrc/main/resources等もソースフォルダとして登録します)
この時点でwicketやcommons-loggingにはCLASSPATHが通されていますので、開発を始める事ができます。自動的に作成されている
index.jspは不要なので削除しておきます。
アプリケーションの作成を開始する
Wicketアプリケーションで最低限必要なのは1つのHTMLテンプレート、とそれに対応するJavaクラス、そしてアプリケーションクラスです。ここではそれぞれ、
| パッケージ | com.example.wicket |
| アプリケーションクラス | Application.java |
| HTMLテンプレート | home.html |
| Javaクラス | Home.java |
としました。
まず、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を編集してください。
src/main/java以下に
Applicationクラスを作成します。ApplicationクラスはWebアプリケーション全体の基点となるクラスで、wicket.protocol.http.WebApplicationクラスを継承して作成します。最低限必要になるのはgetHomePage()メソッドをオーバーライドして、自分のホームページクラスを返すようにする事です。
package com.example.wicket;
import wicket.protocol.http.WebApplication;
public class Application extends WebApplication {
@Override
public Class getHomePage() {
return Home.class;
}
}次に対になるHome.javaとhome.htmlを作成します。Home.javaは
wicket.markup.html.WebPageクラスを継承して作成します。今回は何もロジックを作成しないので、ただ継承するだけです。
package com.example.wicket;
import wicket.markup.html.WebPage;
public class Home extends WebPage {
private static final long serialVersionUID = 1L;
}
HTMLテンプレートとなるhome.htmlファイルも、まずは単純に"Hello,World"と書いてあるだけのものにします。
HTMLテンプレートは、Javaクラスファイルと同じディレクトリに作成する必要がある事に注意してください。
<html><head>
<title>Hello,World</title>
</head>
<body>
Hello,World!
</body>
</html>これで最低限の用意が出来ましたので、アプリケーションサーバで起動してみます。
Jettyを使用して起動する
パッケージ・エクスプローラーのwicketapp1フォルダを右クリックして、デバッグ⇒構成およびデバッグを選択します。Jetty Web選択し、新規作成アイコンをクリックします。
Jetty homeにはJettyを展開したディレクトリを指定し、webapp root dirには
src/main/webappを指定します(もしくは
target/wicketapp1でも良いようです)。その他は必要に応じて変更してください。設定できたら「デバッグ」を押します。
正しく設定されていると以下のようにコンソールに起動ログが表示されます。
22:45:59.671 INFO [main] wicket.protocol.http.WebApplication.logStarted(WebApplication.java:684) >14> [Application] Started Wicket in development mode
起動したらWebブラウザで
http://localhost:8080/にアクセスして動作を確認します。図のようにHTMLテンプレートに書いた内容が表示されたら動作確認は完了です。

Jettyを停止するには、JettyLauncherのツールバーメニューから赤色のアイコンをクリックすれば停止できます。同様に人が走っているアイコンをクリックするとJettyを再起動できます。
ただし、実際の開発ではあまり再起動は必要ありません。デバッグで起動した場合はJavaクラスの変更やHTMLテンプレートの変更は、Jettyの再起動不要でほぼ即時に反映されます。
以上でEclipseを使ったWicketアプリケーション開発を進めていける環境が整いました。
補足
文字コードについて
上記は一切文字コードについて考えていませんが、実際には文字コードを設定する必要があるでしょう。ですのでHTMLテンプレートはXHTMLで書いて<?xml version="1.0" encoding="..." ?>で指定するか、Applicationクラスのinit()内で設定する必要があります。同様にレスポンスのエンコーディングを設定する場合はinit()で設定する必要があります。詳しくは以下のドキュメントで解説されています。
warの作成について
作成したアプリケーションをwarファイルにしたい場合は、プロジェクトディレクトリ上でmvn packageを実行します。
E:\>cd work\wicket\workspace\wicketapp1
E:\work\wicket\workspace\wicketapp1>mvn packageこうする事で
\target\ディレクトリにwicketapp1.warが作成されます。