Gradle项目中如何引入自定义注解处理器JAR包?
解决自定义注解处理器Gradle引入不生效的问题
我帮你梳理下几个关键问题点,一步步解决这个问题:
1. 先修正注解处理器代码的两个小问题
你的LogProcessor里有两个容易踩坑的地方,先调整:
@SupportedAnnotationTypes必须用全类名:你现在写的"Log"是短类名,处理器无法正确识别对应的注解类型,应该改成@Log的完整限定类名(比如你的注解在com.example.annotation包下,就写"com.example.annotation.Log"),或者更推荐用类型引用避免拼写错误:@SupportedAnnotationTypes(Log.class)- 返回值合理性:
process方法返回true表示你已处理完这些注解,后续处理器不会再介入。当前场景下只处理@Log的话没问题,后续若扩展其他注解可再调整。
2. 确保注解处理器JAR包是“合格”的
@AutoService的核心作用是生成META-INF/services/javax.annotation.processing.Processor文件,里面要包含你的LogProcessor全类名。你需要先确认:
- 在注解处理器项目的
build.gradle里,已正确引入AutoService依赖:dependencies { implementation 'com.google.auto.service:auto-service:1.0.1' annotationProcessor 'com.google.auto.service:auto-service:1.0.1' } - 构建JAR后,解压查看是否存在上述文件且内容正确。如果没有这个文件,Gradle根本找不到你的处理器。
3. 目标项目的正确Gradle配置
你之前的两种方式都漏了关键环节:目标项目需要同时引入@Log注解(编译时可用)和注解处理器,而且路径要准确:
方式一:flatDir 配置
repositories { mavenCentral() flatDir { dirs 'libs' } // 此处libs是项目根目录下的文件夹 } dependencies { // 引入@Log注解,仅编译时依赖,不会打包到最终产物 compileOnly name: 'AnnotationSupplier-1.0-SNAPSHOT' // 引入注解处理器,编译阶段执行 annotationProcessor name: 'AnnotationSupplier-1.0-SNAPSHOT' }
方式二:直接引用本地JAR
注意不要写绝对路径的/libs,而是项目根目录下的libs(去掉开头的斜杠):
dependencies { compileOnly files('libs/AnnotationSupplier-1.0-SNAPSHOT.jar') annotationProcessor files('libs/AnnotationSupplier-1.0-SNAPSHOT.jar') }
4. 验证是否生效
执行目标项目的编译命令,查看控制台输出:
./gradlew compileJava
如果配置正确,你应该能在控制台看到类似这样的输出:
Note: found @Log annotation at com.example.demo.MyAnnotatedClass
如果IDE里没显示,优先用命令行编译,IDE有时候会缓存构建状态,可执行./gradlew clean compileJava清空缓存后再试。
内容的提问来源于stack exchange,提问作者Anirban Acharya
相关产品推荐
相关产品推荐

