如何在Java 10中调试Doclet?

时间:2018-07-17 14:35:02

标签: java javadoc java-10

使用Java 8,很容易调试Doclet:How can I debug a Doclet in Eclipse?

但是如何在Java 10和后续版本中实现呢?打电话

jdk.javadoc.internal.tool.Main.execute(javadocArgs);

引发异常:

Exception in thread "main" java.lang.IllegalAccessError: class my.BDoclet (in unnamed module @0x1f36e637) cannot access class jdk.javadoc.internal.tool.Main (in module jdk.javadoc) because module jdk.javadoc does not export jdk.javadoc.internal.tool to unnamed module @0x1f36e637

3 个答案:

答案 0 :(得分:0)

基于Slaw的评论的示例:

  String[] javadocArgs = new String[] {...}
  ServiceLoader<Tool> toolService = ServiceLoader.load(Tool.class);
  Optional<Tool> javadocOpt = toolService.stream().map(p -> p.get()).filter(t -> t.name().equals("javadoc")).findFirst();
  javadocOpt.orElseThrow().run(System.in, System.out, System.err, javadocArgs);

答案 1 :(得分:0)

相同,更优雅:

//import javax.tools.*;
String[] args = new String[]{"-doclet " + MyDoclet.class.getName()};
DocumentationTool docTool = ToolProvider.getSystemDocumentationTool();
docTool.run(System.in, System.out, System.err, args);

但是,我不清楚“ args”应该是什么,因为它不起作用并产生:

javadoc: error - invalid flag: -doclet ...MyDoclet

答案 2 :(得分:0)

javadocArgs是一个包含每个参数作为单个条目的数组:

    String[] docletArgs = new String[]{
        "-doclet", LatexDoclet.class.getName(),
        "-docletpath", "target/classes/", 
        "-sourcepath", "src/test/java/", 
        LatexDoclet.class.getPackageName()
    };
    DocumentationTool docTool = ToolProvider.getSystemDocumentationTool();
    docTool.run(System.in, System.out, System.err, docletArgs);
相关问题