最近项目有要求,需要我把方法上面的文档注释导出,给测试那边阅读。
首先说说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文件对应的路径。案例下载