#java #javadoc #java-9 #doclet
#java #Javadoc #java-9 #doclet
Вопрос:
Я хочу поэкспериментировать с Doclets (JDK 9), поэтому я попробовал все шаг за шагом, приведенным в этой ссылке. Я не добавил ничего пользовательского в Example
класс. Это именно то, что дает Oracle (я только что объявил import
s).
Oracle выдает команду:
javadoc -doclet Example
-overviewfile overview.html
-sourcepath source-location
source-location/Example.java
Теперь, когда я запускаю данную команду javadoc, я получаю следующую ошибку:
javadoc: ошибка — Не удается найти пример класса doclet
Я попробовал несколько вариантов команды, поскольку, похоже, это проблема с directors, но все мои попытки завершились неудачей.
Я помещаю Example.java
в папку моего рабочего стола: C:UsersGeorgeDesktop
Итак, в моей командной строке я cd C:UsersGeorgeDesktop
. Затем javac Example.java
(в случае, если он хочет, чтобы он был скомпилирован).
И затем я пробую все следующие команды, получая ту же ошибку.
javadoc -doclet Example -overviewfile overview.html -sourcepath ./ ./Example.java
.
javadoc -doclet Example -overviewfile overview.html -sourcepath "C:UsersGeorgeDesktop" "C:UsersGeorgeDesktopExample.java"
( без кавычек)
javadoc -doclet Example -overviewfile overview.html"C:UsersGeorgeDesktopExample.java"
Я попробовал несколько других вещей, найденных в SO, но опять же, ничего не работает. Чего мне не хватает? Разве приведенный пример не должен работать?
Пример класса (на случай, если вы видите что-то, чего у меня нет):
public class Example implements Doclet {
Reporter reporter;
String overviewFile;
public static void main(String[] args) {
}
public Example() {
// TODO Auto-generated constructor stub
}
@Override
public void init(Locale locale, Reporter reporter) {
reporter.print(Kind.NOTE, "Doclet using locale: " locale);
this.reporter = reporter;
}
public void printElement(DocTrees trees, Element e) {
DocCommentTree docCommentTree = trees.getDocCommentTree(e);
if (docCommentTree != null) {
System.out.println("Element (" e.getKind() ": " e ") has the following comments:");
System.out.println("Entire body: " docCommentTree.getFullBody());
System.out.println("Block tags: " docCommentTree.getBlockTags());
}
}
@Override
public String getName() {
return "Example";
}
@Override
public Set<? extends Option> getSupportedOptions() {
Option[] options = { new Option() {
private final List<String> someOption = Arrays.asList("-overviewfile", "--overview-file", "-o");
@Override
public int getArgumentCount() {
return 1;
}
@Override
public String getDescription() {
return "an option with aliases";
}
@Override
public Option.Kind getKind() {
return Option.Kind.STANDARD;
}
@Override
public List<String> getNames() {
return someOption;
}
@Override
public String getParameters() {
return "file";
}
@Override
public boolean process(String opt, List<String> arguments) {
overviewFile = arguments.get(0);
return true;
}
} };
return new HashSet<>(Arrays.asList(options));
}
@Override
public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latest();
}
@Override
public boolean run(DocletEnvironment docEnv) {
reporter.print(Kind.NOTE, "overviewfile: " overviewFile);
// get the DocTrees utility class to access document comments
DocTrees docTrees = docEnv.getDocTrees();
// location of an element in the same directory as overview.html
try {
Element e = ElementFilter.typesIn(docEnv.getSpecifiedElements()).iterator().next();
DocCommentTree docCommentTree = docTrees.getDocCommentTree(e, overviewFile);
if (docCommentTree != null) {
System.out.println("Overview html: " docCommentTree.getFullBody());
}
} catch (IOException missing) {
reporter.print(Kind.ERROR, "No overview.html found.");
}
for (TypeElement t : ElementFilter.typesIn(docEnv.getIncludedElements())) {
System.out.println(t.getKind() ":" t);
for (javax.lang.model.element.Element e : t.getEnclosedElements()) {
printElement(docTrees, e);
}
}
return true;
}
}
Комментарии:
1. Вы скомпилировали класс?
2. @JBNizet Oracle в статье ничего не говорится о компиляции. Однако из другого поста SO я это видел, и да, я это сделал. Все то же самое.
Ответ №1:
Запуск javadoc --help
показывает следующую опцию:
-docletpath <path>
Specify where to find doclet class files
Используйте эту опцию, и она должна работать нормально (при условии, что вы скомпилировали класс Example и он действительно находится в каталоге, переданном в качестве аргумента для этой опции).