Gradle自定义插件,需要访问源

时间:2018-07-21 19:53:51

标签: java gradle gradle-custom-plugin

我写了一个gradle插件,希望在那里访问项目源并生成一些文件。当我从Java运行项目时,一切都正常,但是,当我尝试通过插件执行相同操作时,它不起作用。它看不到项目的来源。

是真的吗,在gradle中,源代码对于buildscript不可见,因此对插件也不可见?是否可以使它们可用于插件?

该类用于获取类列表。

public class ClassFinder {
    private final List<? extends Class<?>> classes;

    public ClassFinder(String packageToScan) {
        ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
        provider.addIncludeFilter(new RegexPatternTypeFilter(Pattern.compile(".*")));
        Set<BeanDefinition> classes = provider.findCandidateComponents(packageToScan);

        this.classes = classes.stream()
                .map(bean -> {
                    try {
                        return Class.forName(bean.getBeanClassName());
                    } catch (ClassNotFoundException e) {
                        throw new IllegalStateException(e);
                    }
                })
                .collect(Collectors.toList());
    }

    ...
}

我可以在main方法或插件中使用它。在main中,它找到了我当前项目中的所有类。在插件中,它找不到任何东西(库除外)。

1 个答案:

答案 0 :(得分:1)

您所指的不是源文件,而是已经在当前类路径上编译的类。由于Gradle编译了这些类,因此很显然它们不能出现在Gradle运行时及其插件的类路径中。因此,从Gradle插件收集生产代码的类将不可能。但是,可以通过对类路径中的编译任务中的类使用JavaExec任务来使用Gradle从Gradle调用功能。