简体   繁体   中英

How can I debug a Doclet in Java 10?

Using Java 8, it is easy to debug a Doclet: How can I debug a Doclet in Eclipse?

But how to achieve this in Java 10 and subsequent versions? Calling

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

throws an Exception:

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

The javadocArgs is an array containing each argument as a single entry:

    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);

Example based on Slaw's comment:

  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);

The same, a bit more elegantly:

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

However, it's not clear to me what the "args" should be because it doesn't work and produces:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM