xdoclet
xdoclet
xdocletとは
xdocletとはそもそも何なのかというと、strutsのページで行ったweb.xmlやstruts-config.xml、valication.xmlなどの設定ファイルは、Javaのソースを書き加えるたびに設定を足していかなくてはならないわけですが、これをソースの中にJavadoc形式でそれらの情報を書き込んでおき、xdocletを使って(antも)それらを先ほどのweb.xml、struts-config.xml、valication.xmlに自動で作ってしまおうというものです(実際にはEJBなどにも使う)。つまりソースでそれらの情報を一元管理しようとするものなわけです(以前はweb.xmlもその方法で作っていたのですが、こちらはあまり変更されないので、時間の節約---説明も、実際の制作の場でも---も考え今回ははずします)。
さらに、次のような意味もあります。数人でcvsなどで管理しながらアプリケーションを作っている場合には、何度も出てくるxmlを別々に作って、それらをマージする必要が出てくるわけですが、このxdocletを使えば、そもそもxmlはソースの中味から自動で作成するので、そのようなマージする必要がありません(もっとも同じソースを別々の人が作成すると、元も子もありませんが、それはcvsやコミュニケーションで解決すべき問題でしょう)。
まずはのDownload
からxdoclet-bin-1.2.3.gzをダウンロードしてきて解凍します。その場所ですが、今後はいろいろなライブラリをインストールことになると思うので、
c:/javaに解凍しましょう。
つまり
c:/java/xdoclet-1.2.3ができることになります。
Antのbuild.xml
次に、まずはDosプロンプトから
C:/ant -version
と打つと
Apache Ant version 1.6.2 compiled on July 16 2004
が出てくることを確認してください。もし、これが動かないと、に書いてあるAntのインストールを行ってください。
次に実際のbuild.xmlを作成します。何でもエディタは良いので、次のファイルを作成します。
c:/eclipse/workspace/webcms/build.xml
詳細はAntの本かホームページで調べてください(結構たくさんある)。
- propertyというタグは変数の定義です。
- filesetというのは、ライブラリーなどのjarファイルの指定。
- idというのは、上記のfilesetを束ねている(今回は)。
- targetというのが、いわゆるやりたい「仕事」で、ここにやりたいことを定義していく。今回のdefaultのターゲットはstrutsにしてある(今回のstruts-config.xmlを作成するターゲット)。すなわち、コマンドライン上でantとすると、strutsというターゲットが実行される。
- struts以外にcleanという単にディレクトリーを削除するもの、strutsと同様ソース等からweb.xmlを作成するweb、ApplicationResources.propertiesをnative2asciiで変更してconfディレクトリーからWEB-INF/classes/resourcesにコピーするというpropertyターゲットが書いてある。
file:/c:/eclipse/workspace/webcms/build.xml
具体的な書式
strutsのAction
わからないときは
strutsのActionでは、struts-config.xmlへは次のようなものを書き込むのはすでに出てきました。
<action-mappings> <action path="/helloWorld" type="com.chikkun.webcms.test.HelloWorldAction" name="helloWorldForm" scope="request" validate="true" input="/WEB-INF/jsp/input.jsp"> <forward name="success" path="/WEB-INF/jsp/hello.jsp" redirect="false"/> </action>
そこでこれを使ってxdocletで自動で書き込むには
/** * @author Chiku Kazuro * @struts.action name = "helloWorldForm" * path="/helloWorld" * scope="request" * validate="true" * input="/WEB-INF/jsp/input.jsp" * @struts.action-forward name="success" * path="/WEB-INF/jsp/hello.jsp" * */
というのをソースのクラスの宣言の上に書き込んでおくわけです。
ActionForm
Actionと同様、次のようなstruts-config.xmlは
<form-beans> <form-bean name="helloWorldForm" type="com.chikkun.webcms.test.HelloWorldActionForm"> </form-bean> </form-beans>
は、ソースのクラスの宣言のすぐ上に
/** * @author Chiku Kazuro * @version 0.1 * @struts.form * name="countingMenuForm" * */
を書き込んでおけばよい。
ただし少々面倒なのは
validation.xmlの作成です。これも Xdocletのvalidationのドキュメントに詳細があります。
validationのためのタグ
validation.xmlを自動で作るには、ActionFormのセッターの上に書きます。例えば
<form-validation>
<formset>
<form name="com.chikkun.webcms.test.HelloWorldActionForm">
<field property="name"
depends="required,maxlength">
<msg name="required" key="errors.empty" />
<msg name="maxlength" key="errors.maxlength" />
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
<arg name="maxlength" key="name" position="0" />
<arg name="maxlength" key="${var:maxlength}" position="1"
resource="false"/>
<arg name="required" key="name" position="0" />
</field>
</form>
</formset>
</form-validation>
だったのが、以下のように変わってしまいますが、これは書き方の違いで(特にargの書き方は、上記の方が新しい書き方だと思う。struts1.2?)、動作は変わりありません。
file:/c:/eclipse/workspace/webcms/WEB-INF/validation.xml
mergeファイル
ここもわからない場合はを調べてください。
これで、Action、ActionForm(validation.xmlも含む)などのstruts-config.xmlへの書き出しは出来るのですが、実際にはそれ以外の
<global-forwards> <forward name = "logout" path="/action/Logout" /> <forward name = "login" path="/action/Login" /> </global-forwards>
や
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /> </plug-in>
なども必要ですが、書き出されません。そこで、mergeファイルという考え方があります。ディレクトリはどこでもかまわないのですが、とりあえず
WEB-INF/merge
というディレクトリーを作って、その中にファイルを入れます。そのファイル名は決まっているので、上記のリンクを利用して勉強してください。
WEB-INF/merge/struts-message-resources.xml WEB-INF/merge/struts-plugins.xml
それぞれの中身は上記のものが
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /> </plug-in>
下のものが
<message-resources parameter="Resources.ApplicationResources"/>
です。おわかりのように、上記と全く同じです。必要なものを適切なファイル名でディレクトリにつっこんでおけばOKです。
最後にantの設定ですが、既にbuild.xmlに書き込んであります。
<webdoclet
destdir="${src.dir}"
mergedir="${merge.dir}"
excludedtags="@version,@author,@todo,@param"
force="true"
verbose="true"
encoding="${local.encoding}">
<fileset dir="${src.dir}">
<include name="**/*.java"/>
</fileset>
<strutsconfigxml version="1.1" destdir="WEB-INF"/>
<strutsvalidationxml destdir="WEB-INF"/>
</webdoclet>
というところです。
それで、いつものようにantすれば
file:/c:/eclipse/workspace/webcms/WEB-INF/struts-config.xml


