工作中經常需要對外提供介面,這個時候介面的文檔就非常麻煩,同時是維護在wiki或者其他地方,但是修改代碼之後很可能沒有及時更新wiki,造成很多交流的成本。所以想直接通過javadoc 產生介面文檔的方式。發現maven提供的javadoc外掛程式,但是原生的Doclet不能滿足我的要求。所以需要自己定義doclet。來看下Doclet的定義:
Doclet 是用 JavaTM程式設計語言編寫的程式,它用 doclet API 指定 Javadoc 工具的輸出內容和格式。預設情況下,Javadoc 工具用 SunTM 提供的“標準” doclet 來產生 HTML 形式的 API 文檔。然而,使用者也可用自己的 doclet 根據個人喜好自訂 Javadoc 輸出。使用者可以利用 doclet
API從頭開始編寫 doclet,也可以對標準 doclet 進行修改,以適合自己的需要。
下面是建立和使用自己的 doclet 的基本步驟:
1. 編寫用來構成 doclet 的 Java 程式。為使用 doclet API,該程式應匯入 com.sun.javadoc.*。程式的進入點是一個帶有 public static boolean start 方法的類,它將 RootDoc 作為參數。
2. 編譯 doclet。可以使用 Java Development Kit 的編譯器 javac 來編譯它。
3. 用 -doclet <YourDoclet> 選項運行 javadoc 工具,產生 doclet 指定的輸出。
doclet API 類檔案在 JDK 軟體的 lib/tools.jar 檔案中。當編譯 doclet 和使用自訂 doclet 時,tools.jar 必須在類路徑上。為此,可以對 javac 和 javadoc 使用 -classpath 選項。
這裡說到了doclet需要使用tools.jar,在使用ide比如idea時在project setting中對jdk的classpath加上tools.jar的路徑就可以了。但是這貨調試太麻煩了,根據網上的資料只能在外面先編譯好你的Doclet
,然後用javadoc -doclet 指定編譯好的doclet。但是這樣不能debug doclet程式,重新找了下網上的資料加上自己的時間,發現可以這樣搞
public class APIDoclet { public static boolean start(RootDoc root) { ClassDoc[] classes = root.classes(); for (int i = 0; i < classes.length; ++i) { System.out.println(classes[i]); } return true; } public static void main(String[] args) { String[] docArgs = new String[]{"-doclet", APIDoclet.class.getName(), System.getProperty("user.dir") + "/src/main/java/" + "com/hz/yk/concurrent/aqs/BooleanMutex.java"}; com.sun.tools.javadoc.Main.execute(docArgs); }}
哈哈哈,這下可以打斷點了
附上doclet 的資料:
http://dadi520.iteye.com/blog/545897