java - 在 jdk11 中获取 RootDoc
问题描述
我正在尝试测试一些适用于 Java Doc 的代码,它在 maven-javadoc-plugin 下使用。我试图让它在 jdk11 下工作。我正在追求一个RootDoc
可以在运行测试时使用的实现。
目前测试使用EasyDoclet,它给了我RootDoc
这样的结果:
EasyDoclet easyDoclet = new EasyDoclet(new File("dir"), "com.foo.bar");
RootDoc rootDoc = easyDoclet.getRootDoc()
但是我无法让它在 jdk11 下工作。
我遇到的第一个问题是缺少 tools.jar,所以我将其更改pom.xml
为:
<dependency>
<groupId>org.seamless</groupId>
<artifactId>seamless-javadoc</artifactId>
<version>1.1.1</version>
<exclusions>
<exclusion>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- maybe this will get what ever was in tools.jar -->
<dependency>
<groupId>com.github.olivergondza</groupId>
<artifactId>maven-jdk-tools-wrapper</artifactId>
<version>0.1</version>
</dependency>
这导致了许多情况:
java.lang.NoClassDefFoundError: com/sun/tools/javadoc/PublicMessager
PublicMessager类似乎是为了公开一些构造函数而存在的,我不确定它为什么存在于com.sun.tools
包下。我试图复制这个类: public static class PublicMessager extends
com.sun.tools.javadoc.main.Messager {
public PublicMessager(Context context, String s) {
super(context, s);
}
public PublicMessager(Context context, String s, PrintWriter printWriter, PrintWriter printWriter1, PrintWriter printWriter2) {
super(context, s, printWriter, printWriter1, printWriter2);
}
}
并且错误消息更改为:
java.lang.IllegalAccessError: superclass access check failed: class com.fun.javadoc.FooBar$PublicMessager (in unnamed module @0x4abdb505) cannot access class com.sun.tools.javadoc.main.Messager (in module jdk.javadoc) because module jdk.javadoc does not export com.sun.tools.javadoc.main to unnamed module @0x4abdb50
我使用以下方法暴露jdk.javadoc
于未命名的模块:
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-Dfile.encoding=UTF-8</argLine>
<argLine>--add-opens=jdk.javadoc/com.sun.tools.javadoc.main=ALL-UNNAMED</argLine>
</configuration>
</plugin>
</plugins>
</build>
这意味着我的自定义版本PublicMessager
将不再显示错误,但是com.sun.tools
无法找到无缝下的版本。我制作了自己的版本EasyDoclet
,使用了我的,PublicMessager
但结果发现缺少以下两个类:
import com.sun.tools.javadoc.JavadocTool;
import com.sun.tools.javadoc.ModifierFilter;
在这一点上,我不确定该怎么做。住手!
RootDoc
也许另一种选择是找到我认为的 jdk11 等价物,DocletEnvironment
然后找到一些如何实现它,我不知道如何实现DocletEnvironment
.
解决方案
推荐阅读
- python - 无法将 imgkit 图像转换为 PIL 图像
- python - 如何在python中将1天添加到给定日期
- firebase - Firebase Cloud Function 未执行 Flutter
- php - 如何在laravel中清除购物车derryl解码中的所有数据
- java - 将 GMT 日期时间转换为本地时区日期时间
- c++ - Qt:无法从 MainWindow 外部更新 QQuickWidget
- python - 如何用唯一的行(Python)表示每个用户?
- c++ - eclipse C++远程编译使用cmake
- java - 在android模拟器中访问google api时出现运行时错误
- selenium - 如何填写具有“用户名”和“密码”两个字段的弹出表单?