Java注解处理器无法执行,求排查(Gradle+Java11环境)
注解处理器未执行的排查与解决(Gradle + Java 11)
针对你遇到的注解处理器代码不执行的问题,按以下步骤排查修复:
1. 补全处理器的版本支持注解
Java 11环境下,注解处理器需显式声明支持的源码版本,否则可能被编译器过滤。修改Processor类,添加版本支持注解:
import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; @SupportedSourceVersion(SourceVersion.RELEASE_11) @SupportedAnnotationTypes("org.example.ExampleAnnotation") public class Processor extends AbstractProcessor { @Override public boolean process(Set<? extends TypeElement> anots, RoundEnvironment roundEnvironment) { // 改为从roundEnvironment获取注解元素,确保能捕获到目标 Set<? extends Element> annotatedElements = roundEnvironment.getElementsAnnotatedWith(ExampleAnnotation.class); annotatedElements.forEach(e -> System.out.println("捕获到注解方法:" + e.getSimpleName())); anots.forEach(System.out::println); return true; } }
2. 修正Gradle配置
Gradle默认不会自动识别同模块内的注解处理器,需显式配置编译参数:
- 若处理器和业务代码在同一个模块,在
build.gradle中添加:
plugins { id 'java' } java { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } tasks.withType(JavaCompile) { // 显式指定处理器类 options.compilerArgs += ['-processor', 'org.example.Processor'] options.encoding = 'UTF-8' }
- 若处理器是单独模块,在业务模块的
build.gradle中添加依赖:
dependencies { // 让业务代码能引用注解 compileOnly project(':processor-module') // 指定注解处理器依赖 annotationProcessor project(':processor-module') }
3. 检查服务注册文件的正确性
确认META-INF/SERVICES/javax.annotation.processing.Processor文件:
- 路径正确:放在
src/main/resources/目录下(而非src/main/java) - 内容准确:仅一行
org.example.Processor,无多余空格、换行或拼写错误
4. 验证IDE注解处理配置(如果用IDE开发)
以IntelliJ为例:
- 打开
File > Settings > Build, Execution, Deployment > Compiler > Annotation Processors - 勾选
Enable annotation processing - 确保处理器模块被识别为注解处理器
5. 手动触发编译验证
执行Gradle编译命令,查看控制台输出:
./gradlew clean compileJava
若处理器正常执行,控制台会打印出你在process方法中输出的内容。
内容的提问来源于stack exchange,提问作者Bluecross
相关产品推荐
相关产品推荐

