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 的開發之中,找到更快速的開發模式。