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.