使用com.sun.tools.javadoc.Main.execute在jdk 11中运行Doclet的替代方法是什么?

时间:2019-01-04 13:52:12

标签: java javadoc doclet

我在Apache netbeans 10上使用JDK 11。

从Java 9开始,main方法已被废弃,并标记为没有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或从命令行运行示例吗?

1 个答案:

答案 0 :(得分:3)

假设您要尝试以编程方式运行Javadoc,则https://developers.facebook.com/tools/debug/og/object/模块文档描述了这样做的方法:

  

javadoc

     

此模块等效于通过jdk.javadocToolProvider服务提供商接口(SPI)进行 javadoc 的命令行访问,并通过{{ 3}} SPI。

     

可以通过调用Tool或名称为DocumentationTool的{​​{3}}来获得工具的实例。

根据您之前的代码和所做的编辑,您不需要ToolProvider SPI的功能。 ToolProvider SPI应该足够。如文档中所述(并在注释中使用@AlanBateman),您可以使用以下命令获取ToolProvider javadoc = ToolProvider.findFirst("javadoc").orElseThrow(); 实例:

run

然后,使用您选择的out / err流和所需的参数调用Main.execute方法之一。参数与您当前正在使用的不受支持的int result = javadoc.run(System.out, System.err, /* ... your args ... */); API所使用的参数相同。

std::cout << sizeof(std::underlying_type<A>::type);