【问题标题】:How to use reflection in Gradle task如何在 Gradle 任务中使用反射
【发布时间】:2017-05-16 11:35:13
【问题描述】:

我需要编写一个 Gradle 插件,该插件将在我的应用程序中查找注释并通过反射读取标记的类。我从 Gradle 任务中调用一个方法:

private void scanAnnotatedFields() {
    ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
    provider.addIncludeFilter(new AnnotationTypeFilter(MisEntity.class));

    for (BeanDefinition beanDefinition : provider.findCandidateComponents("ru.org")) {
        Class clazz = null;
        try {
            clazz = Class.forName(beanDefinition.getBeanClassName());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println(clazz.toString());
    }
}

但该方法在我的 Gradle 插件应用程序中读取类,而不是从目标应用程序中读取。我想我必须使用正确的类路径或其他东西。请帮我。谢谢。 P.S.对不起我的英语。

【问题讨论】:

  • 你有例子可以试试吗?可能你只需要设置正确的类路径。
  • 感谢@Opal 的回答。该示例可以从yadi.sk/d/o0_YNfZn3JFiZh 下载。有3个项目。第一个是我的申请。 Annotation 是带有注解的库。 mis-template-plugin 是插件。在 BuildLogicFunctionalTest.java 文件中有项目 1 的绝对路径。在准备示例时,我发现了一个异常 ClassNotFoundException。插件在运行时看不到 MisEntity3.class。如果您能帮助我,我将不胜感激。

标签: java gradle plugins


【解决方案1】:

这个话题是我的问题的答案。但是我没有使用 Spring 反射,而是使用了 org.reflections。 https://discuss.gradle.org/t/gradle-plugin-with-reflections/22690/7

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多