将注释处理器集成到同一项目中

Igo*_*kov 5 java spring maven

是否可以在定义了注释的项目中使用注释处理器?

例:

  • src /

    • MyAnnotation.java
    • path_to_MyAnnotationProcessor.MyAnnotationProcessor.java
    • 其他班
  • 资源
    • META-INF / services / javax.annotation.processing.Processor
  • 绒球

当我运行时mvn clean install,我希望我的处理器将处理用MyAnnotation注释的类。

我不想从另一个库中导入已经编译的处理器,我只想在src中定义它后使用它。

现在,我得到错误: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.1:compile (default-compile) on project my-project: Compilation failure [ERROR] Annotation processor 'path_to_MyAnnotationProcessor' not found

pom.xml的一部分,我在这里引用。给我的处理器:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.plugin.compiler}</version>
            <configuration>
                <source>${version.java}</source>
                <target>${version.java}</target>
                    <annotationProcessors>
                       <proc>path_to_MyAnnotationProcessor.MyAnnotationProcessor</proc>
                    </annotationProcessors>
            </configuration>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

感谢所有人,尤其是@Stefan Ferstl和@yegodm。来自yegodm的解决方案是:“一种方法是两个在同一个项目中具有两个模块。一个模块将定义注释和处理器。另一个模块将其作为建立构建顺序的依赖项。”

Ste*_*stl 5

解决此问题的最简单方法是将您的项目转换为多模块项目,其中注释处理器位于其自己的模块中。对于注释处理器有一个不同的模块,您可以使用全新的选项通过/<annotationProcessorPaths>定义注释处理器。groupIdartifactId

使用注释处理器的模块可能需要依赖于注释处理器模块才能首先构建它。

注意:在此答案的先前版本中,我描述了解决此问题的另一种方法,但该方法显然无法开箱即用。该部分已被删除。