使用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
答案 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);