如何在Maven 2中使用自定义注释处理器?
在我们的企业应用程序中,我们正在寻找一种从Java类中收集数据的动态方法。 我们创建了一个带有name
属性的自定义注释接口( @interface
)。 我们想从所有带注释的类中收集此属性的值。
我设法为自定义注释创建AnnotationProcessorFactory
和AnnotationProcessor
。 由于我们使用的是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_project
的pom.xml
中。 假设工厂和处理器在sub_project1
,自定义注释在sub_project2
, sub_project3
,…, sub_projectn
要检查两件事:
- 确保
main_project
(或插件) 依赖于包含ComponentAnnotationProcessFactory
的项目 。 - Apt Maven插件的
配置标签对我不起作用,但如果插件的完全限定名称在META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
文件中,则插件会找到工厂类。 (有关详细信息,请参阅apt的文档 。)
更好的方法是使用JDK 6的注释处理function (而不是Maven Apt插件),因为它不需要com.sun
包和tools.jar
的lib
文件夹中的tools.jar
。
maven-compiler-plugin 2.5.1 1.6 1.6 com.example.annotationprocessor.Processor
进一步参考:
- Java专家通讯中的注释处理工具
- 什么是默认注释处理器发现过程?