jdk 11 中 com.sun.tools.javadoc.Main.execute 与 运行 Doclet 的替代项是什么?

What is the alternative of com.sun.tools.javadoc.Main.execute to run Doclet in jdk 11?

我在 Apache netbeans 10 上使用 JDK 11。

main 方法自 java 9 起被删除,并在没有 alternative

的地方标记为删除

我在命令行中的所有尝试都以

结束
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 或来自命令行的工作示例?

假设您尝试以编程方式运行 Javadoc,jdk.javadoc 模块文档描述了这样做的方法:

javadoc

This module provides the equivalent of command-line access to javadoc via the ToolProvider and Tool service provider interfaces (SPIs), and more flexible access via the DocumentationTool SPI.

Instances of the tools can be obtained by calling ToolProvider.findFirst or the service loader with the name "javadoc".

根据您之前的代码和您的编辑,您不需要 DocumentationTool SPI 的功能。 ToolProvider SPI 应该足够了。如文档中所述(以及评论中的@AlanBateman),您可以使用以下方法获取 ToolProvider 实例:

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

然后,您可以使用您选择的 out/err 流和所需参数调用 run 方法之一。这些参数与您当前使用的不受支持的 Main.execute API 相同。

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