如何在Maven 2中使用自定义注释处理器?

时间:2012-07-26 11:14:31

标签: java maven-2 annotations maven-plugin annotation-processing

在我们的企业应用程序中,我们正在寻求一种从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的{​​{1}}。假设工厂和处理器位于main_project,自定义注释位于sub_project1sub_project2,...,sub_project3

1 个答案:

答案 0 :(得分:7)

要检查两件事:

  1. 确保包含main_project的{​​{1}}(或插件)depends on the project
  2. Apt Maven插件的ComponentAnnotationProcessFactory配置标签对我不起作用,但如果插件的完全限定名称在<factory>文件中,则插件会找到工厂类。 (参见documentation of apt for the details。)
  3. 更好的方法是使用annotation processing features of JDK 6(而不是Maven Apt插件),因为它不需要META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory包和com.sun文件夹中的tools.jar JDK。

    lib

    进一步参考: