ClassNotFoundException из пользовательского Java Doclet с толстой банкой Spring Boot - PullRequest
0 голосов
/ 30 октября 2019

У меня есть собственный Doclet, использующий Java 8, который создает файлы RAML на основе классов, найденных в проекте. Плагин очень хорошо находит исходные файлы проекта, а добавление docletArtificacts через Maven прекрасно обрабатывает большинство jar-файлов;однако мне нужно создать экземпляры классов, используя «Class.forName (class)» внутри доклета, и я получаю ClassNotFoundExceptions для любых файлов .class, которые находятся в толстом фляге Spring Boot. Как я могу заставить загрузчик классов распознавать классы в моем толстом фляге Spring Boot?

Я пытался использовать класс LaunchedURLClassLoader из Spring boot, но, похоже, это не помогает, если я что-то не упустил,что вполне возможно.

Очень простой код:

try {
    return Class.forName("my.fully.qualified.classname");
} catch (ClassNotFoundException e) {
    throw new RuntimeException(e);
}

Файл класса на самом деле находится внутри моего весеннего загрузочного файла JAR: BOOT-INF / classes / my / полностью / qualified/classname.class

Я пробовал все варианты, которые я могу представить для передачи в разные загрузчики классов в качестве 3-го параметра и т. д., но, похоже, ничего не работает.

Вот информация о плагине maven,на случай, если кто-то найдет это полезным:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <executions>
        <execution>
            <phase>install</phase>
            <goals>
                <goal>javadoc</goal>
            </goals>
            <configuration>
                <doclet>my.doclet.RamlDoclet</doclet>
                <docletArtifacts>
                    <docletArtifact>
                        <groupId>my.doclet</groupId>
                        <artifactId>raml-doclet-artifact</artifactId>
                        <version>${myVersion}</version>
                    </docletArtifact>
                    <docletArtifact>
                         <groupId>${project.groupId}</groupId>
                         <artifactId>${project.artifactId}</artifactId>
                         <version>${project.version}</version>
                    </docletArtifact>
                </docletArtifacts>
                <useStandardDocletOptions>false</useStandardDocletOptions>
                <failOnError>false</failOnError>
            </configuration>
        </execution>
    </executions>
</plugin>

Любые подсказки, которые помогут мне двигаться вперед, будут полезны.

...