Как я могу получить выходные данные программно вызванного Javadoc doclet от вызывающей стороны?
Я пишу инструмент для очистки Javadoc от уже существующих исходных файлов Java и предварительной обработки его через пользовательский доклет (специфика обработки не имеет значения). Я написал доклет, и я могу вызвать доклет из своего кода через программный API, как указано в документации по Java.
Похоже, что этот механизм "только для записи" в том смысле, что результаты выполнения доклета, если таковые имеются, не могут быть переданы обратно вызывающему методу execute() через объект Java первого класса. Вместо этого я вынужден прибегнуть к клуджу, например записать промежуточный вывод в файл из доклета, а затем прочитать его обратно из моего вызывающего.
Итак, мой вопрос: есть ли способ получить, скажем, строку, сгенерированную моим пользовательским доклетом, непосредственно в invoker? Например:
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();
}
Заранее спасибо!
1 ответ
Итак, самый элегантный способ, который я мог бы придумать, это заставить класс doclet использовать статическую переменную-член, которая установлена в RootDoc
Экземпляр, переданный с помощью жгута Javadoc, когда он вызывает доклет start()
метод, а затем разрешить доступ к вызывающей стороне к этому статическому члену через геттер. Это связано с очевидными проблемами безопасности потоков при использовании статического члена, но для моих целей это работает нормально.