Gradle多模块Java项目中annotationProcessors已引入未执行问题排查
注解处理器未执行排查方案
- 检查注解处理器SPI注册配置
Java SPI机制要求注解处理器必须在processors模块的src/main/resources/META-INF/services/javax.annotation.processing.Processor文件中填写自定义处理器的全限定类名,没有该配置的话Java编译器无法识别到你的注解处理器实现。
如果不想手动编写该配置,可以使用Google AutoService工具简化注册:
在processors模块的依赖中添加:
- 检查注解处理器SPI注册配置
dependencies { compileOnly 'com.google.auto.service:auto-service-annotations:1.0.1' annotationProcessor 'com.google.auto.service:auto-service:1.0.1' }
然后在你的自定义Processor类上添加@AutoService(Processor.class)注解即可自动生成SPI配置文件。
- 检查Processor类的基础注解配置
你的自定义Processor类必须添加两个注解:
@SupportedAnnotationTypes("你的@Builder注解的全限定类名"):指定当前处理器要处理的注解,必须和你自定义的@Builder的完整包名+类名完全匹配,匹配错误的话处理器不会被触发@SupportedSourceVersion(SourceVersion.RELEASE_8)(根据你使用的JDK版本调整):指定处理器支持的Java源码版本,缺少该注解可能导致处理器不被执行
- 检查Processor类的基础注解配置
- 检查app模块的注解使用
确认app模块中你添加的@Builder注解是你annotations模块自定义的注解,不要误导入了Lombok等第三方库的同名注解。同时确认自定义@Builder注解的@Retention保留策略至少为RetentionPolicy.CLASS,推荐使用SOURCE即可。
- 检查app模块的注解使用
- 冗余配置清理
app模块中compileJava.options.annotationProcessorPath = configurations.annotationProcessor配置是冗余的,Gradle的Java插件默认已经会自动关联annotationProcessor配置到编译任务的处理器路径,该配置不会导致错误可以直接删除。
- 冗余配置清理
内容的提问来源于stack exchange,提问作者cshjsc
相关产品推荐
相关产品推荐

