Получение RootDoc ​​в jdk11 - PullRequest
       24

Получение RootDoc ​​в jdk11

0 голосов
/ 28 декабря 2018

Я пытаюсь протестировать некоторый код, который работает с 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.Я попытался сделать копию этого класса: открытый статический класс PublicMessager расширяет

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;

На данный момент я не уверен, что делать.halp!

Возможно, альтернативой было бы вместо этого найти jdk11-эквивалент RootDoc, который я считаю DocletEnvironment, а затем кое-как, как получить реализацию этого, я понятия не имею, как получить реализациюDocletEnvironment.

...