Peta Walkers

HOME: 開発日記

2003.10.05(日) - MobWiki 1.1.2をEclipseプロジェクトにする

 WikiのJSP&Servlet実装であるMobWikiをEclipseプロジェクトにしてみようと思う。ちなみに私、JSP初心者です。

資料集め

 今回の環境。

 TomcatとTomcatプラグインはずっと前に導入済みなので今回は割愛。

とりあえずMobWikiをインストール

 実は金曜日に済ませる予定だったが、Mobster Projectさんのサーバにつながりにくい状態だったので日を改めた。 そういえば、ADSLを導入してからというもの、定額で快適な環境のおかげで文書や圧縮ファイルのローカルコピーを持つ習慣が無くなったと思う。 コピーする手間が省けて楽にはなったものの、サーバの調子が悪いときは資料を参照できずに支障が出るというリスクもあるわけだ。 本当に無いと困るものはコピーしてあるのだが。

 mobwiki_1.1.2.zipをダウンロードし、wiki.warをTomcatのwebappsディレクトリに移動するだけで自動的に展開される。 あとはブラウザでhttp://localhost:8080/wiki/index.jspにアクセスするとMobWikiのFrontPageが表示される。まあなんと簡単なんでしょう。

Eclipseプロジェクトにする

プロジェクトの作成

 TomcatプラグインによるTomcatプロジェクトをmobwiki_1.1.2フォルダを指定して作成する。

 mobwiki_1.1.2srclibをEclipseが作成したWEB-INFの中に移動する。 これに合わせてAntのビルドファイルbuild.xml内のsrc、libへのパスを書き換えておく。

 プロジェクトフォルダの右クリックでプロパティを開き、[Javaのビルドパス]-[ライブラリー]でWEB-INF内のjarを追加する。 これによって大部分のエラーが消えるが、不要なimportに対しての警告がいくつか残る。

警告の解消

 このままでも良いのだが、タスクビューで警告をダブルクリックしてソースを開き、Shift+Ctrl+Oでimportを再編成すると警告は消える。

 これで一応プロジェクトのエラーは消えたのだが、大切なものが欠けている。画像やスタイルシートだ。

wiki.warの解体

 wiki.warから次のファイルやフォルダを取り出してプロジェクトフォルダに移動する。

 jar xvfでもZIPをサポートした解凍ツールでも良いが、ZIPフォルダやVECAが便利。

配備の方法を検討

 これでファイルがそろったが、JSPなのでサーバに配備しないと動作しない。 ここはやはり自動的にwarを作成してなおかつサーバにインストールされるようにしたい。

Tomcatプラグインのwarエクスポート機能

 プロジェクトフォルダを右クリックし、 [Tomcatプロジェクト]-[プロジェクトの設定に従いWARファイルを作成する]という項目があるので試してみる。

 設定はプロジェクトのプロパティーを開き、[Tomcat]-[全般]-[エキスポートするWARファイル]で出力先を設定できるだけである。なんか嫌な予感が。

 これで作ったwarはプロジェクトフォルダ内のほとんどすべてのファイルが含まれている。 build.xmlやREADMEも入ってしまう。 開発中はこれでもいいかもしれないが、配布を考えたとき、これはあまり美しくないかも。

 何か良い方法は無いかと探したら、resources.propertiesproject.warExport.exclude.filesにwarに入れたくないファイルを並べるといいらしい(releaseNotesV21.txtより)。

 だが、このresources.propertiesはプラグインフォルダのtomcat.jarの中にある。これではだめだ。

Antビルドでwarターゲットを用意する

 そうだ、Antがあるじゃないか!

 ただし、同梱のbuild.xmlにはwarを作ってサーバに配備するターゲットが無いので自分で用意することになった。

<property name="war.name" value="mobwiki.war"/>
<property name="war.dest" value="webappsへのパス${war.name}"/>

<target name="war" description="warの作成">
    <delete file="${war.name}"/>
    <war destfile="${war.name}" webxml="WEB-INF/web.xml">
        <!--
        <classes dir="WEB-INF/classes"/>
        <lib dir="WEB-INF/lib"/>
        -->
        <webinf dir="WEB-INF">
            <exclude name="web.xml"/>
            <exclude name="src/**"/>
            <exclude name="lib/servlet.jar"/>
        </webinf>
        <fileset dir=".">
            <include name="css/**"/>
            <include name="images/**"/>
            <include name="upload/**"/>
            <include name="*.jsp"/>
        </fileset>
    </war>
</target>
<target name="war-export" description="warをTomcatに配置">
    <move overwrite="true" file="${war.name}" tofile="${war.dest}"/>
</target>

 上のソースは追加した部分のみ。<exclude>で必要の無いファイルを除外した。

 ちなみにservlet.jarはwarに入れるとTomcatが「そのクラスは上書きできないよ」と警告を出すので除外した。

WebappClassLoader: validateJarFile(C:\Program
Files\Apache Group\Tomcat 4.1\webapps\wiki\WEB-INF\lib\servlet.jar)
 - jar not loaded. See Servlet Spec 2.3, section 9.7.2.
 Offending class: javax/servlet/Servlet.class

ようやくソースをながめる

ライブラリ

 libディレクトリにいくつかあるjarの機能を調べてみた。

commons-beanutils-1.3.jar
JavaBeansを使うのに便利なクラス集。ReflectionやIntrospectionを使わないとできないことを内部でやってくれる。
参考: http://muimi.com/j/jakarta/commons/beanutils/
commons-fileupload-1.0-dev20021128.jar
ファイルアップロードを簡単に済ませる。
参考: http://muimi.com/j/jakarta/commons/fileupload/
commons-logging1.0.2.jar
各種ログAPIへのブリッジ。
参考: http://muimi.com/j/jakarta/commons/logging/
jakarta-oro-2.0.6.jar
正規表現。OROMatcher, AwkTools, PerlTools。
org.apache.commons.jrcs.diff.jar
diff。
servlet.jar
servlet。
mobster.jarmobster-src.jar
ちょっとしたユーティリティークラスのようだ。URLに自動的にリンクを設定する機能はここに含まれていた。

中心となるパッケージ

 transformとtagはWikiのマークアップをHTMLに変換するパッケージ。

JSPファイル

 7つあるJSPファイルのうち、リクエストを受け付けるファイルは4つ。

あとがき

 MobWikiは私も内部を知っているYukiWikiを参考にJSP&Servletで実装されているということで読みやすかった。 YukiWikiをJavaで書くとこうなるんだなぁとか、いろいろと興味深いものがあった(のでここに書いた以上に詳しく読んでいたりする)。

 Wiki自体が単純だし、なじみ深いものだからJSP入門としては良い題材ではないだろうか。

HOME: 開発日記