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

在我们的企业应用程序中,我们正在寻找一种从Java类中收集数据的动态方法。 我们创建了一个带有name属性的自定义注释接口( @interface )。 我们想从所有带注释的类中收集此属性的值。

我设法为自定义注释创建AnnotationProcessorFactoryAnnotationProcessor 。 由于我们使用的是Maven 2,因此我将以下内容添加到主项目的pom.xml中的插件中。

   org.codehaus.mojo apt-maven-plugin 1.0-alpha-5  our.company.api.component.lister.ComponentAnnotationProcessFactory   

这属于主项目,有几个子项目。 工厂和定制处理器属于这些子项目之一。 自定义注释分散在所有子项目中,这就是我将插件放在主项目的pom.xml中的原因。

问题是当我发出mvn apt:process命令时,我收到了关于没有处理器的注释的警告,我们的自定义注释就在其中。 我认为这意味着该插件无法找到工厂类。

我应该怎么做才能让插件找到工厂和处理器文件?

编辑:

项目层次结构非常简单:

 main_project |-sub_project1 |... |-sub_projectn 

该插件位于main_projectpom.xml中。 假设工厂和处理器在sub_project1 ,自定义注释在sub_project2sub_project3 ,…, sub_projectn

要检查两件事:

  1. 确保main_project (或插件) 依赖于包含ComponentAnnotationProcessFactory 的项目 。
  2. Apt Maven插件的配置标签对我不起作用,但如果插件的完全限定名称在META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory文件中,则插件会找到工厂类。 (有关详细信息,请参阅apt的文档 。)

更好的方法是使用JDK 6的注释处理function (而不是Maven Apt插件),因为它不需要com.sun包和tools.jarlib文件夹中的tools.jar

    maven-compiler-plugin 2.5.1  1.6 1.6   com.example.annotationprocessor.Processor       

进一步参考:

  • Java专家通讯中的注释处理工具
  • 什么是默认注释处理器发现过程?