ReflectionsException: не удалось получить тип для имени org.gradle.api.Plugin - PullRequest
0 голосов
/ 28 января 2019

Я реализовал пользовательский плагин Gradle, и он работает, но во время сборки Gradle у меня ReflectionsException: Could not get the type for name org.gradle.api.Plugin из-за сканирования отражений.Почему загрузчик классов не видит тип?

Caused by: java.lang.ClassNotFoundException: org.gradle.api.Plugin
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.reflections.ReflectionUtils.forName(ReflectionUtils.java:388)

Пользовательский плагин реализует Plugin<Project>, как показано ниже:

//CommonGradlePlugin
import org.gradle.api.Plugin;
import org.gradle.api.Project; 

public class CommonGradlePlugin implements Plugin<Project> {
    //...
}

1 Ответ

0 голосов
/ 30 января 2019

Почему загрузчик классов не видит тип?

Я полагаю, что классы gradle не включены в путь классов compile / runtime, просто потому, что это инструмент сборки.Вот почему классы gradle не могут быть найдены с помощью Reflections.

Вы можете исключить пакет с плагином gradle, используя Reflection ConfigurationBuilder:

ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
FilterBuilder filterBuilder = new FilterBuilder();

configurationBuilder.addUrls(ClasspathHelper.forPackage(PACKAGE_TO_SCAN));
filterBuilder
        .includePackage(PACKAGE_TO_SCAN)
        .excludePackage(PACKAGE_TO_EXCLUDE);
configurationBuilder.filterInputsBy(filterBuilder);

Reflections reflections = new Reflections(configurationBuilder);
...