登入  |  English
感謝您對「自由軟體鑄造場」的支持與愛護,十多年來「自由軟體鑄造場」受中央研究院支持,並在資訊科學研究所以及資訊科技創新研究中心執行,現已完成階段性的任務。 原網站預計持續維運至 2021年底,網站內容基本上不會再更動。本網站由 Denny Huang 備份封存。
也紀念我們永遠的朋友 李士傑先生(Shih-Chieh Ilya Li)。
技術專欄 自動產生程式碼

自動產生程式碼

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




自由軟體鑄造場電子報 : 第 62 期 自由軟體校園推廣

分類: 技術專欄