java - ReflectionsException : Could not get type for name org. gradle.api.Plugin

标签 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> {
    //...
}

最佳答案

Why class loader doesn't see the type?

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

关于java - ReflectionsException : Could not get type for name org. gradle.api.Plugin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54405553/

相关文章:

Java: vector 定义

android-studio - 传递依赖关系在 Android Studio 中中断 "Go to declaration"

gradle - 依赖依赖的常规项目的gradle构建失败

Gradle:无法在构建脚本的范围内获取插件类

android - 重构程序包名称和重命名applicationID仍然使gradle失败

docker - 在根级存储库中添加jcenter()会破坏我的构建

java - 用户输入图像的 url 并将其显示在 ImageView 中

java - 如何解决 "Exception in thread "AWT-EventQueue-0"java.lang.NullPointerException"?

java - 如何获取 guava jar 以供命令行使用

android - 安装 react-native-firebase 后 React Native Android 应用程序崩溃