我正在编写一个工具,从预先存在的Java源文件中抓取Javadoc,并通过自定义doclet对其进行预处理(处理的细节无关)。我已经编写了doclet,并且能够通过编程的API从代码中调用doclet,如Java文档中所示。
这种机制似乎是"只写"的,因为运行doclet的结果(如果有的话)不能通过第一类Java对象传输回execute()方法的调用程序。相反,我不得不采用一种笨拙的方法,比如将中间输出从doclet中写入一个文件,然后从调用方读取回来。
所以我的问题是:有没有任何方法可以直接在调用程序中检索,比如说,由我的自定义doclet生成的字符串?例如:
public void foo() {
// Invoke my custom doclet via Javadoc programmatically
com.sun.tools.javadoc.Main.execute(new String[] {"-d", "docs", "- sourcepath", "/home/usr/src", "p1", "p2"});
// Access the String output of my doclet here
String processedJavadoc = getTheOutputOfMyDoclet();
}
提前感谢!
好的,所以我能想出的最优雅的方法是让doclet类使用一个静态成员变量,该变量设置为Javadoc线束在调用doclet的start()
方法时传递的RootDoc
实例,然后允许通过getter访问该静态成员的调用方。使用静态成员会带来明显的线程安全问题,但就我的目的而言,它运行良好。