【问题标题】:What is the alternative of com.sun.tools.javadoc.Main.execute to run Doclet in jdk 11?com.sun.tools.javadoc.Main.execute 在 jdk 11 中运行 Doclet 的替代方法是什么?
【发布时间】:2019-05-31 02:30:05
【问题描述】:

我在 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 或从命令行运行一个工作示例?

【问题讨论】:

    标签: java javadoc doclet


    【解决方案1】:

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

    javadoc

    此模块通过ToolProviderTool 服务提供者接口(SPI) 提供对javadoc 的等效命令行访问,并通过DocumentationTool SPI 提供更灵活的访问。

    工具实例可以通过调用ToolProvider.findFirst或名称为"javadoc"service loader获取。

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

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

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

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

    【讨论】:

    • 感谢您的资源,但我无法从中创建一个有效的示例,它需要对语言和领域有深入的了解,不幸的是我没有。
    • var javadoc = ToolProvider.findFirst("javadoc").orElseThrow()。然后使用适当的 out/err 流和您当前传递给不受支持的/JDK 内部 Main.execute 的参数调用 javadoc.run
    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 2019-01-13
    • 1970-01-01
    • 2022-11-13
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    相关资源
    最近更新 更多