6

在我們的企業應用程序中,我們正在尋找一種動態的方式從我們的Java類中收集數據。我們使用name屬性創建了自定義註釋界面(@interface)。我們希望從所有註釋類中收集此屬性的值。如何在Maven 2中使用自定義註釋處理器?

我設法爲自定義註釋創建了一個AnnotationProcessorFactoryAnnotationProcessor。由於我們使用的是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_projectpom.xml。只是假設,工廠和處理器是sub_project1和自定義的註解是在sub_project2sub_project3,...,sub_projectn

+0

什麼是您的項目層次樣子Annotation Processing Tool? – Daniel 2012-07-26 11:20:57

回答

6

兩件事情來檢查:

  1. 確保main_project(或插件) depends on the project其中包含您的ComponentAnnotationProcessFactory
  2. Apt Maven Plugin的<factory>配置標記對我來說不起作用,但如果插件的完全限定名位於META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory文件中,該插件將查找工廠類。 (見documentation of apt for the details。)

更好的辦法是使用(而不是Maven的公寓插件)的annotation processing features of JDK 6,因爲它不需要com.sun包和tools.jar從JDK的lib文件夾。

<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> 

更多參考: