在jdk11中获取RootDoc

时间:2018-12-28 04:44:22

标签: java javadoc java-11 maven-javadoc-plugin

我正在尝试测试一些与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}}。

0 个答案:

没有答案