gpt4 book ai didi

java - 需要访问源的 Gradle 自定义插件

转载 作者:行者123 更新时间:2023-12-02 10:59:21 25 4
gpt4 key购买 nike

我编写了一个 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 插件中收集生产代码的类是不可能的。但是,可以使用 Gradle 通过使用 JavaExec 任务以及类路径上编译任务中的类来调用 Gradle 中的功能。

关于java - 需要访问源的 Gradle 自定义插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51459603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com