nos*_*rat 6 java maven-2 annotations maven-plugin annotation-processing
在我们的企业应用程序中,我们正在寻找一种从Java类中收集数据的动态方法.我们@interface用name属性创建了一个自定义注释接口().我们希望从所有带注释的类中收集此属性的值.
我设法创建了一个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>
Run Code Online (Sandbox Code Playgroud)
这属于主项目,有几个子项目.工厂和定制处理器属于这些子项目之一.自定义注释分散在所有子项目中,这就是我将插件放在pom.xml主项目中的原因.
问题是当我发出mvn apt:process命令时,我收到了关于没有处理器的注释的警告,我们的自定义注释就在其中.我认为这意味着该插件无法找到工厂类.
我应该怎么做才能让插件找到工厂和处理器文件?
编辑:
项目层次结构非常简单:
main_project
|-sub_project1
|...
|-sub_projectn
Run Code Online (Sandbox Code Playgroud)
该插件是在pom.xml的main_project.只是假设,工厂和处理器是sub_project1和自定义的注释是sub_project2,sub_project3,...,sub_projectn
要检查两件事:
main_project(或插件)取决于包含您的项目ComponentAnnotationProcessFactory.<factory>Apt Maven插件的配置标签对我不起作用,但如果插件的完全限定名称在META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory文件中,则插件会找到工厂类.(有关详细信息,请参阅apt的文档.)更好的方法是使用JDK 6的注释处理功能(而不是Maven Apt插件),因为它不需要com.sun包和tools.jar来自libJDK 的文件夹.
<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>
Run Code Online (Sandbox Code Playgroud)
进一步参考: