在我们的企业应用程序中,我们正在寻找一种动态方式来从我们的 Java 类中收集数据。我们创建了一个带有 name
属性的自定义注释界面 (@interface
)。我们想从所有带注释的类中收集此属性的值。
我设法为自定义注释创建了一个 AnnotationProcessorFactory
和一个 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
命令时,我收到了一条关于注释没有处理器的警告,我们的自定义注释就在其中。我认为这意味着插件找不到工厂类。
我应该怎么做才能让插件找到工厂和处理器文件?
编辑:
项目层次结构非常简单:
main_project
|-sub_project1
|...
|-sub_projectn
该插件位于 main_project
的 pom.xml
中。假设工厂和处理器在 sub_project1
中,自定义注释在 sub_project2
, sub_project3
, ..., sub_projectn
最佳答案
要检查两件事:
- 确保
main_project
(或插件)depends on the project其中包含您的ComponentAnnotationProcessFactory
. <factory>
Apt Maven 插件的配置标签对我不起作用,但如果其完全限定名称在META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
中,插件会找到工厂类。文件。 (参见 documentation of apt for the details。)
更好的方法是使用 annotation processing features of JDK 6 (而不是 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>
进一步引用:
关于java - 如何在 Maven 2 中使用自定义注释处理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11668055/