最近項目有要求,需要我把方法上面的文檔註釋導出,給測試那邊閱讀。
首先說說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文件對應的路徑。案例下載