我正在尝试测试一些与Java Doc一起使用的代码,该代码在maven-javadoc-plugin下使用。我正在尝试使其在jdk11下工作。我正在实施 let conv_format = async function(id:string){
let stringArray = new Array();
let type = 'genes/ncbi-geneid:'
let url = 'http://rest.kegg.jp/conv/' + type + id;
let proxy = 'https://cors-anywhere.herokuapp.com/';
let data = await xhr({
url: proxy + url,
method: 'GET',
encoding: undefined,
headers: {
"Content-Type": "text/plain"
}
},
function done(err, resp, body){
if(err){
console.error(err);
return;
}
// v this consoles what I want v
console.log(resp.rawRequest.responseText);
return resp;
});
// v this throws cannot read responseText of undefined what v
console.log(data.rawRequest.responseText);
return data.rawRequest.responseText;
}
,可以在运行测试时使用它。
当前测试使用的是EasyDoclet,它像这样给了我RootDoc
:
RootDoc
但是我无法在jdk11下运行它。
我遇到的第一个问题是tools.jar丢失,因此我将EasyDoclet easyDoclet = new EasyDoclet(new File("dir"), "com.foo.bar");
RootDoc rootDoc = easyDoclet.getRootDoc()
更改为:
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>
PublicMessager类的存在似乎是为了向某些构造函数公开,我不确定为什么它存在于java.lang.NoClassDefFoundError: com/sun/tools/javadoc/PublicMessager
包下。我试图复制此类:
公共静态类PublicMessager扩展
com.sun.tools
错误消息更改为:
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;
等效的jdk11,我认为它是RootDoc
,然后找到一些实现方法,但我不知道如何获得{ {1}}。