自定义注释处理器的 Maven 编译器插件问题

Posted

技术标签:

【中文标题】自定义注释处理器的 Maven 编译器插件问题【英文标题】:Maven compiler plugin issue with custom annotation processor 【发布时间】:2021-11-27 22:17:54 【问题描述】:

我已经编写了一个自定义注释处理器并配置了 maven 编译器插件,如下所示,我面临Immutables 注释处理器的问题,它位于我的应用程序类路径中。当我通过 Maven 编译器插件添加我的注释处理器时,Immutables 给出了编译错误。我的项目中也需要不可变对象。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source>$java.version</source>
        <target>$java.version</target>
        <generatedSourcesDirectory>$project.build.directory/generated-sources/</generatedSourcesDirectory>
        <annotationProcessors>
            <annotationProcessor>
                org.smarttechie.TraceAnnotationProcessor
            </annotationProcessor>
        </annotationProcessors>
    </configuration>
</plugin>

任何使用不可变/任何注释处理器以及我的自定义注释处理器的提示。

【问题讨论】:

【参考方案1】:

将您的注释处理器打包到一个 JAR 中,并将该 JAR 作为 编译依赖。务必添加 META-INF/services/javax.annotation.processing.Processor 到你的 JAR (内容与您的处理器类名称单行):

org.smarttechie.TraceAnnotationProcessor

如果您不希望将新 JAR 作为生成的依赖项包含在内 神器,将其标记为 prodied 和/或 true。

【讨论】:

当我添加具有自定义注释处理器的 jar 时,在编译期间不会像通过 maven 插件添加它时那样调用注释处理器。依赖范围只是编译。 抱歉,我疏忽了一步。我已经更新了我的答案。

以上是关于自定义注释处理器的 Maven 编译器插件问题的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 maven-release 插件之后运行自定义 maven 插件吗?

即使脚本使用“开始”,使用 Maven exec 插件启动 Windows 批处理脚本也会阻止构建

注释处理器,生成编译器错误

Maven2生命周期帮助

JVM系列六(自定义插入式注解器).

Spring boot 使用@Endpoint注解自定义端点, 不能通过 Restfult 访问问题处理方法