Java新手的跌倒日記 - 從程式原始碼產生設計文件Orz

 Thu, 17 Jan 2008 14:37:49 +0800

公司在apply一些制度,嚴格要求文件的製作。一些比較早開始的專案就麻煩了,缺了一些文件,結不了案。

原始碼裡面是有一些註解(但是不完全,趕時間就會缺),但其實Java API Doc的格式也不符合我們對於文件格式的要求。這時突然想到,一些UML工具裡面都有Reverse Engineering的工具,不知道可以拿來做什麼。

試過了Jude, StarUML, ArgoUML, BOUML等工具,我們需要的是最好可以直接轉成我們需要的格式的功能。StarUML裡面有產生Word Doc的工具,但是沒有裝word好像無法正常執行。幾經搜尋,在網路上找到用xslt的技術,把xmi格式的文件轉換成html的文件的方法。雖然還是沒有完全符合需求,但是已經可以訂製我們要的格式了。

其實Microsoft Word也有xml的檔案格式,可以考慮利用同樣的方法,把從UML工具轉出的xmi檔案轉成word xml。Openoffce的odt以及office 2007的docx格式,雖然也是xml,但是實際檔案是一個archive,裡面包含了好幾個xml檔案,為了簡化,最後自己決定用word 2003 xml格式來嘗試一下。

另外在網路上找到有人寫好的xmi-to-html的xslt解決方案:http://www.objectsbydesign.com/projects/xmi_to_html_2.html,它支援ArgoUML0.80以上版本所產生的xmi檔案,所以就以這個為基礎來改了。(另外,我是先用OpenOffice做好格式範本,存成Word 2003 xml格式,再用這個為做xslt的基礎)

跟幾個UML工具搭配來測了一下,發現ArgoUML以及BOUML所產生的xmi檔案都可以適用(BOUML必須選擇產生XMI 1.2的格式)。但是BOUML速度比較快,對於各種編碼的容錯比較好,所以後來就用BOUML來做了。(不過如果是要製作UML,我會推薦Jude,介面設計比較好。)

(BOUML可以在http://bouml.free.fr/找到)

我的步驟大致如下:

  1. 先安裝好BOUML
  2. 開新專案
  3. 選擇Languages->Java
  4. 選擇Tools->Reverse Java->跳過選擇.cat檔->選擇原始碼目錄->開始
  5. 選擇Tools->Generate XMI 1.2->指定檔名與編碼->按下Java按鈕

接下來是準備java的lib,需要到Xalan Java下載需要的工具,解開binary distribution的zip檔後,使用其中的xalan.jar以及serializer.jar兩個jar檔。

xmi-to-html裡面的run.cmd,命令我用起來怪怪的,既然已經把xalan.jar都拿來了,乾脆直接呼叫:java -jar xalan.jar -in input.xmi -xsl xmi-to-xml.xsl -out output.xml,這樣就可以把input.xmi檔案轉成word 2003 xml格式的output.xml檔案了,xmi-to-xml.xsl則是我修改過的xsl檔案,用來把xmi轉成xml。

xsl可以到下面的網址下載:http://www.fillano.idv.tw/xmi-to-xml.xsl(由於xmi-to-html是以gpl的形式發表,所以我改寫的也應該用gpl發表。詳見xmi-to-html裡面的說明。)

需要修改的話,microsoft網站上可以下載Microsoft Office 2003 XML Reference Schemas來參考,chm裡面有詳細的說明:下載