需要访问源的Gradle自定义插件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要访问源的Gradle自定义插件相关的知识,希望对你有一定的参考价值。
我写了一个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
中,它找到了我当前项目中的所有类。在插件中它没有找到任何东西(除了库)。
你所指的不是源文件,而是已经在当前类路径上编译的类。由于Gradle编译了这些类,很明显它们不能出现在Gradle运行时及其插件的类路径中。因此,无法从Gradle插件中收集生产代码的类。但是,通过使用带有类路径上编译任务的类的JavaExec
任务,可以使用Gradle从Gradle调用您的功能。
以上是关于需要访问源的Gradle自定义插件的主要内容,如果未能解决你的问题,请参考以下文章
Android Gradle 插件自定义 Gradle 任务 ⑪ ( Gradle 任务分组 | 为自定义 Gradle 任务指定分组 | 为自定义 Gradle任务指定任务描述 | 代码示例 )
Android Gradle 插件自定义 Gradle 任务 ④ ( Task#doLast 函数用法 | 自定义 Gradle 任务代码示例 )
Android Gradle 插件自定义 Gradle 任务 ④ ( Task#doLast 函数用法 | 自定义 Gradle 任务代码示例 )
Android Gradle 插件Gradle 自定义 Plugin 插件 ② ( buildSrc 目录中实现 Gradle 插件 | 实现 Gradle 插件代码 | 模块引入插件并编译 )
Android Gradle 插件Gradle 自定义 Plugin 插件 ⑥ ( 在 buildSrc 模块中依赖 Android Gradle 插件 | 完整代码示例 )
Android Gradle 插件Gradle 自定义 Plugin 插件 ⑥ ( 在 buildSrc 模块中依赖 Android Gradle 插件 | 完整代码示例 )