You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 12:15:30