Какая альтернатива com.sun.tools.javadoc.Main.execute для запуска Doclet в jdk 11? - PullRequest
0 голосов
/ 04 января 2019

Я использую JDK 11 для сетевых компонентов Apache 10.

Метод main исключен начиная с java 9 и помечен для удаления, где нет альтернативы

Все мои попытки в командной строке заканчивались на

javadoc: error - Cannot find doclet class Exception

Когда я пытаюсь:

com.sun.tools.javadoc.Main.execute (new String[]{"-doclet",TestVarElement.class.getName(),"C:\\Users\\Super3\\Documents\\NetBeansProjects\\MyProject\\src\\pk\\TestVarElement.java"});

Я получаю:

javadoc: error - Doclet class pk.TestVarElement does not contain a start method

Start метод исключен и заменен методом run, предыдущая настройка работает для Java 8 и старше, я хочу эквивалент для 9,10,11.

Я просмотрел документацию для DocumentationTool и соответствующие материалы, но не нашел ни одного рабочего примера.

Есть ли какой-нибудь способ, которым мы можем запустить Doclet / DocletEnvironment программно или рабочий пример из командной строки?

1 Ответ

0 голосов
/ 04 января 2019

Предполагая, что вы пытаетесь запустить Javadoc программно, документация модуля jdk.javadoc описывает способы сделать это:

Javadoc

Этот модуль обеспечивает эквивалент доступа командной строки к javadoc через ToolProvider и Tool Интерфейсы поставщика услуг (SPI) и более гибкий доступ через DocumentationTool SPI.

Экземпляры инструментов можно получить, вызвав ToolProvider.findFirst или загрузчик службы с именем "javadoc".

Исходя из вашего предыдущего кода и ваших правок, вам не нужны функциональные возможности DocumentationTool SPI. ToolProvider SPI должно быть достаточно. Как упомянуто в документации (и @AlanBateman в комментариях), вы можете получить экземпляр ToolProvider, используя следующее:

ToolProvider javadoc = ToolProvider.findFirst("javadoc").orElseThrow();

Затем вы вызываете один из run методов с выбранными вами потоками out / err и нужными аргументами. Аргументы те же, что и для неподдерживаемого Main.execute API, который вы используете в данный момент.

int result = javadoc.run(System.out, System.err, /* ... your args ... */);
...