WicketとMaven2を使った開発This is a featured page


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に変更します。
Javaパースペクティブ

次に、作成したプロジェクトディレクトリをインポートします。メニューのファイル⇒インポートでウィザードを起動し、「既存プロジェクトをワークスペースへ」を選択します。

ウィザード1

ルート・ディレクトリとして作成したプロジェクトディレクトリを指定し、「終了」をクリックします。
ウィザード2


プロジェクトディレクトリ右図のようにインポートされます。もしこのように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でも良いようです)。その他は必要に応じて変更してください。設定できたら「デバッグ」を押します。

Jettyでの実行

正しく設定されていると以下のようにコンソールに起動ログが表示されます。

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停止

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が作成されます。


No user avatar
sim_j
Latest page update: made by sim_j , Feb 12 2007, 8:11 AM EST (about this update About This Update sim_j Edited by sim_j


view changes

- complete history)
Keyword tags: java EE Jetty maven Wicket
More Info: links to this page
There are no threads for this page.  Be the first to start a new thread.
Text File pom.xml.txt (Text File - 2k)
posted by sim_j   Feb 12 2007, 8:10 AM EST
pom.xmlのサンプル
Text File web.xml.txt (Text File - 1k)
posted by sim_j   Jan 13 2007, 9:22 AM EST
xeb.xmlのサンプル

Related Content

  (what's this?Related ContentThanks to keyword tags, links to related pages and threads are added to the bottom of your pages. Up to 15 links are shown, determined by matching tags and by how recently the content was updated; keeping the most current at the top. Share your feedback on Wetpaint Central.)