如何使用自定义注解处理器与Maven 2?(How to use custom annotation

2019-07-30 15:33发布

在我们的企业应用程序,我们正在寻求一种动态的方式来收集我们的Java类的数据。 我们创建了一个自定义的注释界面( @interface )与name属性。 我们想从所有注释类收集这些属性的值。

我设法创建一个AnnotationProcessorFactoryAnnotationProcessor自定义注释。 由于我们使用Maven 2,我增加了以下内容的插件pom.xml主体工程。

    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>apt-maven-plugin</artifactId>
      <version>1.0-alpha-5</version>
      <configuration>
        <factory>our.company.api.component.lister.ComponentAnnotationProcessFactory</factory>
      </configuration>
    </plugin>

此驻留在其中有若干个子项目的主项目。 工厂和定制处理器在这些子项目之一。 自定义注释分散在所有的子项目,这就是为什么我把插件在pom.xml的主要项目。

问题是,当我发出mvn apt:process命令我得到了一个关于注释警告不处理器和我们的自定义注解是其中之一。 我认为这意味着该插件无法找到工厂类。

我应该怎么做这样的插件可以找到厂家和处理器的文件?

编辑:

该项目的层次结构是非常简单的:

main_project
|-sub_project1
|...
|-sub_projectn

该插件是在pom.xml的的main_project 。 只是假设,工厂和处理器是sub_project1和自定义的注解是在sub_project2sub_project3 ,..., sub_projectn

Answer 1:

有两件事情要检查:

  1. 确保main_project (或插件) 取决于项目包含您的ComponentAnnotationProcessFactory
  2. <factory>的公寓Maven插件的配置标签并没有为我工作,但插件查找工厂类,如果它的全名是在META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory文件。 (见的容易获取详细信息的文档 。)

一种更好的方法是使用JDK 6的注释处理功能 (而不是Maven的公寓插件),因为它不要求com.sun包和tools.jarlib的JDK文件夹。

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>

            <configuration>
                <source>1.6</source>
                <target>1.6</target>

                <annotationProcessors>
                    <annotationProcessor>
                        com.example.annotationprocessor.Processor
                    </annotationProcessor>
                </annotationProcessors>
            </configuration>
        </plugin>
    </plugins>
</build>

更多参考:

  • 注释处理工具在Java的专家时事
  • 什么是默认的注解处理器发现过程?


文章来源: How to use custom annotation processor with Maven 2?