Java 8升级Java 11出现No processor claimed any of these annotations告警如何解决
问题原因
这个警告是Java 9及以上版本的javac编译器新增的检测逻辑导致的:编译器会扫描所有编译期识别到的注解,校验是否有对应的注解处理器声明要处理该注解,没有匹配到的就会触发该告警。
你列出的这些Spring、Jackson、校验注解本身都是运行期生效的注解,本来就不需要编译期注解处理器处理,属于正常的误告警。
解决方法
- 方案1:显式声明项目用到的注解处理器(推荐)
Java 9+不支持注解处理器通过普通依赖的传递引入,需要在编译插件的annotationProcessorPaths节点下显式声明你用到的所有注解处理器,比如常用的Lombok、Spring Boot配置处理器、MapStruct等,示例Maven配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <!-- 建议用3.8.1及以上版本兼容Java11 --> <configuration> <source>11</source> <target>11</target> <annotationProcessorPaths> <!-- 示例:声明你用到的注解处理器,根据项目实际使用情况调整 --> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </path> <path> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>${spring-boot.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin>
如果用Gradle,对应在dependencies里用annotationProcessor声明依赖即可。
- 方案2:直接关闭该类告警
如果你的项目没有用到任何编译期注解处理器,或者不想显式声明,可以在编译参数里关掉processing类的告警,Maven配置示例:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <target>11</target> <compilerArgs> <arg>-Xlint:-processing</arg> </compilerArgs> </configuration> </plugin>
注意事项
不要随意添加
<proc>none</proc>配置,该参数会完全禁用所有注解处理器的执行,如果你项目用到Lombok等依赖注解处理器的组件,会直接导致编译失败。
内容的提问来源于stack exchange,提问作者surm
相关产品推荐
相关产品推荐

