gpt4 book ai didi

java - Gradle 插件任务反射扫描插件的项目类文件而不是当前项目文件

转载 作者:行者123 更新时间:2023-12-02 09:12:16 26 4
gpt4 key购买 nike

我创建了一个 Gradle 插件,它可以扫描项目中的类文件并查找哪些具有注释。

我让它工作并编译了它。现在,当我在项目中运行任务时,它不会扫描我所在项目的类并在其上运行任务,而是扫描插件项目本身的类文件。我做错了什么?

final ClassLoader loader = Thread.currentThread().getContextClassLoader();
try {
ClassPath classpath = ClassPath.from(loader); // scans the class path used by classloader
log.info("classPath = {}", classpath);
for (ClassPath.ClassInfo classInfo : classpath.getTopLevelClassesRecursive(packageName)) {
log.info("classInfo={}", classInfo);
Class<?> clazz = classInfo.load();
if (clazz.isAnnotationPresent(RestController.class)) {
Method[] methods = clazz.getMethods();
for (Method method : methods) {
doSomething(clazz, method);
}
}
}
} catch (IOException | NoSuchFieldException | IllegalAccessException ex) {
String errorMsg = new StringBuilder("Unable to generate ").append(propertiesFileName).append(" file.").toString();
log.error(errorMsg, ex);
throw ex;
}

最佳答案

这不能按您期望的方式工作:

  1. 默认情况下,Gradle 在构建项目时不会加载您的项目类文件。它们将通过编译生成、通过测试执行加载等...但通常不作为 Gradle 执行任务的一部分。
  2. 当你的插件接触到类加载器时,它处于托管 Gradle 世界中,它有自己的类加载器技巧。所以你必须了解哪些技巧被使用......但给定 1,这仍然不起作用。

鉴于您正在尝试的内容看起来很像 annotation processing ,您应该研究处理您的需求的方式。

关于java - Gradle 插件任务反射扫描插件的项目类文件而不是当前项目文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59308406/

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