javadoc和Doclet使用的一些事情

最近項目有要求,需要我把方法上面的文檔註釋導出,給測試那邊閱讀。
首先說說Java裏面的註釋,一共有三種。

1.//單行註釋
2./* */區塊註釋,可以有多行
3./**
*/文檔註釋

ps:上面那個不換行,不能正確顯示。

本文重點就在第三種:文檔註釋。說到文檔註釋,我們很自然的就想到了javadoc,這個官方提供的工具是相當好用,直接在命令行運行就可以生成html文件。當然默認生成的文檔是html格式,就和官網給的源代碼閱讀網頁差不多的,如果你有閒心,你可以自己生成比較看看的,沒有驚喜和彩蛋。

顯然默認生成的這個不符合項目要求的,需要手動修改的。好在sun公司給我們提供了一個API–Doclet,通過繼承這個類,我們可以定製任意自己想要的輸出。

直接上代碼

public class ExampleDoclet extends Doclet {

  public static boolean start(RootDoc root) {
    ClassDoc[] classes = root.classes();
    //解析classes 
    return true;
  }
}

看着是不是很熟悉?好像在哪裏見到過一樣的,沒錯就是反射。看起來就像反射,具體怎麼實現,有興趣的可以自己去研究一下,我在這裏講思路。具體ClassDoc這個怎麼解析,可以自己查閱相關API。

重點來了,怎麼調用?

 public static void main(String[] args) throws Exception {
     String[] docArgs =
         new String[] {
           "-doclet", ExampleDoclet.class.getName(), "這個參數是你需要解析的.java文件的絕對路徑","如果你需要一次解析兩個.java文件,可以繼續在這後面添加絕對路徑"
         };
     com.sun.tools.javadoc.Main.execute(docArgs);
  }

“-doclet”這是一個參數申明,ExampleDoclet.class.getName()代表你使用的那個Doclet類來解析你.java文件。

是不是有疑問爲什麼這裏會調用execute這個方法?如果你有興趣去看com.sun.tools.javadoc.Main源碼,你就會發現一個神奇的事情。

源碼圖片
是不是一點驚喜都沒有,main()裏面就執行了execute()方法。

似乎貌似好像已經講完了,代碼也說了,思路也實現了。

end

其實你在第一步的時候你就發現了一個問題,編譯器會提示你找不到Doclet這個類。這是一個很簡單的問題,你需要從jdk的lib下面找到tools.jar這個包,直接復到你的項目裏面作爲資源包,順便附上一個懶人專用鏈接。tools.jar下載

附上我的代碼,就一個java文件的,下載過後自己修改一下main()裏面自己java文件對應的路徑。案例下載

如果有疑問,歡迎提出!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章