ReflectionsException:无法获取名称为org.gradle.api.Plugin的类型

时间:2019-01-28 15:45:26

标签: java gradle gradle-plugin

我已经实现了自定义的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 :(得分:1)

  

为什么类加载器看不到类型?

我想gradle类不包含在编译/运行时类路径中,只是因为它是一个构建工具。这就是为什么Reflections无法找到gradle类的原因。

您可以使用Reflection的ConfigurationBuilder排除带有gradle插件的软件包:

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);