在我们的企业应用程序中,我们正在寻求一种动态方式来从 Java 类收集数据。我们创建了一个自定义注释接口(@interface
)与一个name
财产。我们希望从所有带注释的类中收集该属性的值。
我设法创建了一个AnnotationProcessorFactory
and an AnnotationProcessor
用于自定义注释。由于我们使用的是 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
命令我收到有关没有处理器的注释的警告,我们的自定义注释就在其中。我认为这意味着插件找不到工厂类。
我应该怎么做才能让插件找到工厂和处理器文件?
EDIT:
项目层次结构非常简单:
main_project
|-sub_project1
|...
|-sub_projectn
该插件位于pom.xml
of the main_project
。假设工厂和处理器位于sub_project1
自定义注释位于sub_project2
, sub_project3
, ..., sub_projectn
有两件事需要检查:
- 确保
main_project
(或插件)取决于项目 http://mojo.codehaus.org/apt-maven-plugin/examples/configuring-a-factory.html其中包含你的ComponentAnnotationProcessFactory
.
- The
<factory>
Apt Maven 插件的配置标签对我不起作用,但如果工厂类的完全限定名称在,则该插件会找到工厂类META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
文件。 (参见apt 的文档了解详细信息 http://docs.oracle.com/javase/1.5.0/docs/guide/apt/GettingStarted.html.)
更好的方法是使用JDK 6的注解处理特性 http://docs.oracle.com/javase/6/docs/api/javax/annotation/processing/package-summary.html(而不是 Maven Apt 插件),因为它不需要com.sun
包和tools.jar
来自lib
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>
更多参考:
-
注释处理工具 http://www.javaspecialists.eu/archive/Issue167.html在 Java 专家时事通讯中
- 默认注释处理器发现过程是什么? https://stackoverflow.com/q/11685498/843804
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)