2012-10-12 59 views
8

這個問題似乎很明顯,但實施對我來說很難。如何用Ant編譯註釋處理器?

我的目標是編寫Ant構建腳本編譯需要另一班由註解處理器生成一些類。 我有一個自定義註釋,它的處理器實現(繼承自AbstractProcessor類)。

據我瞭解,我需要:

  1. 編譯標註處理
  2. 運行編譯器對一些註解類來生成新的。
  3. 編譯需要生成的類

的代碼(步驟1 & 2)類:


<target name="compileAnnotationProcessor">   
    <javac destdir="${OUTPUT_DIR}" 
      debug="true" 
      failonerror="true" 
      includeantruntime="false" 
      classpath="${java.class.path}"> 
     <src> 
      <pathelement path="${PROJECT_DIR}/tools/src"/> 
     </src> 

     <include name="/path/to/annotation/processor/package/**"/> 
    </javac> 
</target> 

<target name="generateFilesWithAPT" depends="compileAnnotationProcessor"> 
    <javac destdir="${OUTPUT_DIR}" 
      includeantruntime="false" 
      listfiles="false" 
      fork="true" 
      debug="true" 
      verbose="true"> 
     <src> 
      <pathelement path="${PROJECT_DIR}/common/src/"/> 
     </src> 
     <include name="/path/to/files/to/compile/**"/> 
     <classpath> 
      <pathelement path="${OUTPUT_DIR}"/> 
      <pathelement path="${java.class.path}"/> 
     </classpath> 

     <compilerarg line="-proc:only"/> 
     <compilerarg line="-processorpath ${OUTPUT_DIR}/path/to/annotation/processor/package/annProcessorImplement"/> 
    </javac> 
</target> 

實際上,第一任務執行良好和編譯。 Annotation處理器實現的類文件。它正在停止在第二個任務。

螞蟻說:Annotation processing without compilation requested but no processors were found.

我在做什麼錯? 也許我應該把註釋處理器類放在.jar?或者提供一個帶有.class擴展名的文件名作爲-processorpath參數? 我嘗試了幾種方案,但沒有什麼幫助..


注:

我使用的,而不是apt之一,因爲documentation是apt工具以及API com.sun.mirror不贊成索賠螞蟻javac任務。 我也看過這個question,但沒有信息如何正確編譯處理器。

我使用:

  • 的Java 1.6
  • 螞蟻1.8.2

回答

4

我通常的做法是:

  • 與註解處理器在了一起包註釋它自己的罐子
  • 通過ME註冊註釋處理器TA-INF /該罐中的服務

然後,無論您對註釋有依賴性,註釋處理器都會自動選取,無需任何其他配置。

+0

是否可以在沒有放置註釋處理器(加註釋)的情況下做同樣的事情?罐? – ivstas

+0

至少註釋處理程序通常應該位於不同於使用註釋註釋的類的jar中,因爲註釋處理在編譯註釋處理程序時必須禁用。您可以將註釋和註釋處理器放置在兩個獨立的jar中,但是您必須聲明它們兩者之間的依賴關係來處理註釋,我認爲在大多數情況下這並不舒服。 – Puce

+0

需要說明的是,我並不是說jar應該只包含註釋和註釋處理器,但它不應該包含任何需要由註釋處理器處理的類。 – Puce

相關問題