2012-10-12 36 views
8

Câu hỏi dường như là hiển nhiên, nhưng việc triển khai khá khó khăn đối với tôi.Làm cách nào để biên dịch bộ xử lý chú thích với Ant?

Mục tiêu của tôi là viết Ant xây dựng kịch bản để biên dịch một số lớp học đòi hỏi phải có các lớp học khác được tạo ra bởi Processor Chú thích. Tôi có chú thích tùy chỉnh và triển khai bộ xử lý của nó (được kế thừa từ lớp AbstractProcessor).

Như tôi hiểu rằng tôi cần phải:

  1. Biên dịch Processor Chú
  2. Run trình biên dịch trên một số lớp học chú thích để tạo ra những cái mới.
  3. Biên soạn các lớp đòi hỏi phải tạo ra các lớp học

Mã (bước 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> 

Trên thực tế, nhiệm vụ đầu tiên được thực hiện tốt và biên dịch. tệp lớp cho việc triển khai bộ xử lý chú thích. Nó dừng lại ở nhiệm vụ thứ hai.

Ant nói: Annotation processing without compilation requested but no processors were found.

Tôi đang làm gì sai? Có lẽ tôi nên đặt lớp trình xử lý chú thích trong một .jar? Hoặc cung cấp tên tệp có đuôi .class làm đối số -processorpath? Tôi đã thử nhiều tùy chọn nhưng không giúp ..


Ghi chú:

Tôi đang sử dụng kiến ​​javac nhiệm vụ thay vì apt một vì documentation tuyên bố rằng công cụ apt cũng như com.sun.mirror API bị phản đối. Tôi cũng đã xem qua số question này, nhưng không có thông tin về cách biên dịch bộ xử lý theo đúng cách.

Tôi đang sử dụng:

  • Java 1.6
  • Ant 1.8.2

Trả lời

4

cách tiếp cận thông thường của tôi là:

  • gói chú thích cùng với bộ vi xử lý chú thích trong bình riêng của mình
  • đăng ký bộ xử lý chú thích qua ME TA-INF/dịch vụ trong bình đó

Sau đó, bất cứ nơi nào bạn phụ thuộc vào chú thích, bộ xử lý chú thích sẽ tự động được tải lên mà không cần thêm bất kỳ cấu hình nào.

+0

Có thể thực hiện tương tự mà không cần đặt bộ xử lý chú thích (cộng với chú thích) trong tệp.jar? – ivstas

+0

Ít nhất bộ xử lý chú thích thường phải nằm trong một cái lọ khác với các lớp, được chú thích bằng chú thích của bạn, vì việc xử lý chú giải phải bị vô hiệu hóa khi biên dịch các bộ xử lý chú thích. Bạn có thể có các chú thích và bộ xử lý chú thích trong hai lọ riêng biệt, nhưng sau đó bạn phải khai báo một sự phụ thuộc trên cả hai để xử lý các chú thích, điều này ít thoải mái hơn trong hầu hết các trường hợp, tôi nghĩ vậy. – Puce

+0

Để rõ ràng, tôi không có nghĩa là bình chỉ nên chứa chú thích và bộ xử lý chú thích, nhưng nó không được chứa bất kỳ lớp nào cần được xử lý bởi bộ xử lý chú thích. – Puce

Các vấn đề liên quan