Maven编译插件报错:找不到自定义注解处理器,需保留@Slf4j使用
解决注解处理器找不到的问题
1. 修正SPI文件位置与内容
确保javax.annotation.processing.Processor文件位于src/main/resources/META-INF/services/目录下,文件内仅包含自定义处理器的全类名com.example.MyProcessor,不要有多余空格或换行。
2. 调整Maven编译器插件配置
不要直接在annotationProcessors里指定处理器,改用annotationProcessorPaths管理处理器依赖,既保留自定义处理器的加载,也能支持Lombok的@Slf4j。同时升级插件版本到兼容Java 17的版本(如3.11.0):
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>17</source> <target>17</target> </configuration> <executions> <!-- 第一阶段:单独编译注解处理器,禁用注解处理避免循环依赖 --> <execution> <id>compile-processor</id> <phase>process-classes</phase> <goals> <goal>compile</goal> </goals> <configuration> <includes> <include>com/example/MyProcessor.java</include> </includes> <proc>none</proc> </configuration> </execution> <!-- 第二阶段:编译业务代码,启用注解处理并指定处理器路径 --> <execution> <id>compile-main</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> <configuration> <includes> <include>**/*.java</include> <exclude>com/example/MyProcessor.java</exclude> </includes> <proc>process</proc> <annotationProcessorPaths> <!-- 引入本模块已编译的自定义处理器 --> <path> <groupId>${project.groupId}</groupId> <artifactId>${project.artifactId}</artifactId> <version>${project.version}</version> <type>classes</type> </path> <!-- 引入Lombok依赖 --> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> </path> </annotationProcessorPaths> </configuration> </execution> </executions> </plugin>
3. 拆分注解处理器到独立模块(推荐)
如果同一模块的编译顺序问题难以调试,建议将自定义注解处理器单独拆分为一个Maven模块,主模块通过annotationProcessorPaths依赖该模块:
<!-- 主模块的maven-compiler-plugin配置 --> <annotationProcessorPaths> <path> <groupId>com.example</groupId> <artifactId>processor-module</artifactId> <version>1.0.0</version> </path> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> </path> </annotationProcessorPaths>
4. 检查注解处理器的注解配置
确认@SupportedAnnotationTypes的值是自定义注解的全类名,而非处理器自身的类名。例如你的自定义注解是com.example.MyAnnotation,则代码应改为:
@SupportedAnnotationTypes("com.example.MyAnnotation") @SupportedSourceVersion(SourceVersion.RELEASE_17) public class MyProcessor extends AbstractProcessor { /* code */ }
内容的提问来源于stack exchange,提问作者swing1234
相关产品推荐
相关产品推荐

