Java Opensources for Web Development Part I:嘗試使用來自 Opensource 的小工具(1)
Lession 4 : 自動產生程式碼
有時候,我們會不斷地撰寫重複的程式碼,例如在撰寫 EJB2.x 的版本,又要處理一些有的沒有 Callback methods,我們除了使用 IDE 工具讓我們專注於 Business Logic 的開發之外,還有沒有其他方法來簡化我們的工作呢?很高興地,我們有 XDoclet 這個小工具來輔助我們開發 EJB、Web 以及處理一些重複性的工作。
首先,讓我們先思考一下,什麼是可以產生的程式碼。基本上就是,具有規則性的轉檔處理,我們將一個已經存在的原始資料,經過程式碼產生器,可以幫忙完成剩 餘的部份,或是產生更多的輔助檔案。然而,我們的原始資料,可以分為 UML 的 Model 資料、 基本的 Data 檔案如 XML 或是 CSV 等等、或是程式的原始碼。不過,我們今天所要探討的是 XDoclet 來協助我們開發原始碼,他的特徵是利用 Annotation,類似 “註解” 的方式,撰寫一些基本的元素,讓程式產生器可以根據 Annotations 與 Ant Task 的工作項目,來取代你重複的工作項目。XDoclet 的網址為 :https://xdoclet.sourceforge.net/xdoclet/index.html可 以下載到最新的版本,當你完成下載解壓縮到一個暫存目錄之後,你必須要建立一個你的工作區域。另外,XDoclet 必須倚靠 Apache Ant 進行執行的動作,所以你必須另外下載 ant(請參閱 Lession2 Ant),並且設定 %ANT_HOME%\bin; 在 PATH 的系統環境變數之中。
假設你建立了一個名為 xdoclettest 的工作目錄,接著建立 /src, /lib, /xdocletlib 等,並且把 xdoclet 你想用的一些 jars 檔複製到 /xdoclettest/lib 目錄之下。接著讓我們來先製作一個有效的 Ant build.xml for Xdoclet.
<?xml version="1.0" encoding="UTF-8"?>
<project name="build1" default="todo" basedir=".">
<property name="lib.dir" location="lib" />
<property name="xdoclet.lib.dir" location="xdocletlib" />
<property name="src.dir" location="src" />
<property name="todo.dir" location="todo" />
<path id="xdoclet.lib.path">
<fileset dir="${lib.dir}" includes="*.jar" />
<fileset dir="${xdoclet.lib.dir}" includes="*.jar" />
</path>
<target name="init" description="initialize">
<mkdir dir="${todo.dir}"></mkdir>
<taskdef name="documentdoclet"
classname="xdoclet.modules.doc.DocumentDocletTask"
classpathref="xdoclet.lib.path" />
</target>
<target name="todo" depends="init">
<documentdoclet destdir="todo">
<fileset dir="${src.dir}">
<include name="**/*.java" />
</fileset>
<info />
</documentdoclet>
</target>
</project>
這是一個很基本的 build.xml ,可以看到,我們在 init Target 之中,定義了一個名為 documentdoclet 的工作項目。而在 todo 的 Target 之中,他真正利用 documentdoclet 去執行 xdoclet.modules.doc.DocumentDocletTask,在執行後,就會產生出所有src 目錄之下有撰寫 /**@todo **/ 的程式碼,並且產生出 HTML 讓你檢測。
範例: MyApp1.java
public class MyApp1 {
/** @todo welcome xdoclet world **/
public void test() {
}
}
很明顯的,我們是利用 “註解” /** ….. */ 的方式,加上 @todo 這個特殊的 Annotation,配合 ant 的 task 呼叫 xdoclet 的模組進行 Code-Generation,如果按照這個思考邏輯, 我們可以利用更多現成或自制的 @Annotation 來取代我們很多的程式碼開發動作。
利用 XDoclet 必須了解你想要做的項目,是否已經有現成的模組,例如使用 就可以輕易的產生 Web Application 所需的 Servlet, Filter, configurations 等,非常的方便,
<target name="generate-web">
<taskdef name="webdoclet"
classname="xdoclet.modules.web.WebDocletTask"
classpathref="xdoclet.lib.path"/>
<webdoclet destdir="${gen.src.dir}" mergeDir="${merge.dir}">
<fileset dir="${src.dir}">
<include name="**/*Servlet.java" />
<include name="**/*Filter.java" />
<include name="**/*Listener.java" />
<include name="**/*Tag.java" />
</fileset>
<deploymentdescriptor
destdir="${web.deployment.dir}"
distributable="false" />
</webdoclet>
</target>
所以善用 XDoclet,可以讓我們在 J2EE 的開發之中,找到更快速的開發模式。