2012-10-12 39 views
8

Soru açık gibi görünüyor, ancak uygulama benim için oldukça zor.Ek açıklama işlemcisi Ant ile nasıl derlenir?

Amacım başka sınıflar Ek Açıklama İşleyen tarafından oluşturulan gerektiren bazı sınıfları derlemek Ant yapı komut dosyasıiçin yazmaktır. Özel bir ek açıklamalarım var ve işlemci uygulaması (AbstractProcessor sınıfından miras alınmış).

  1. yenilerini oluşturmak için bazı açıklamalı sınıflar üzerinde ek açıklama İşlemci
  2. çalıştırın derleyici derleme: Anlıyorum gibi

    girmem gerekiyor.

  3. sınıfları

kodu (aşama 1 & 2) oluşturulan gerektiren sınıfları derleme:


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

Aslında, ilk görevi iyi bir performans gösteren ve derler. Annotation işlemci uygulaması için sınıf dosyası. 2. görevde duruyor.

Ant diyor ki: Ben yanlış ne yapıyorum Annotation processing without compilation requested but no processors were found.

? Belki ek açıklama işlemci sınıfını .jar içine koymalıyım? Veya .class uzantılı bir dosya adı -processorpath argümanı olarak mı sağlar? Birkaç seçenekleri denedik ama hiçbir şey


Notlar .. yardımcı olur:

yerine apt aracı olarak com.sun.mirror API kullanımdan kaldırılmıştır apt bir documentation çünkü iddiaların karınca javac görevi kullanıyorum. Ayrıca bu question'u inceledim, ancak işlemciyi doğru şekilde nasıl derleyeceğimiz hakkında bir bilgi yok.

kullanıyorum:

  • Java 1.6
  • Ant 1.8.2

cevap

4

Her zamanki yaklaşım:

  • açıklama işlemcide birlikte ek açıklamayı paketi kendi kavanozunu
  • ek açıklama işlemcisini ME üzerinden kaydettirin TA-INF/hizmetler bu kavanozda

Ardından ek açıklamalarınıza bağımlı olduğunuz her yerde, ek açıklama olmadan ek açıklama işlemcisi otomatik olarak alınır.

+0

Aynı işlemi, ek açıklama işlemcisi (artı ek açıklama) yerleştirmeden de yapmak mümkündür.jar? – ivstas

+0

En azından ek açıklama işlemcileri derleme ek açıklamaları derlenirken ek açıklama işleminin devre dışı bırakılması gerektiğinden, ek açıklama notu genellikle notlarınızla açıklanmış sınıflardan farklı bir kavanozda olmalıdır. Ek açıklamaları ve notlandırma işlemcilerini iki ayrı kavanozda alabilirsiniz, ancak daha sonra çoğu durumda daha rahat olan ek açıklamaları işlemek için her ikisine de bağımlılık beyan etmelisiniz. – Puce

+0

Açık olmak gerekirse, kavanozun yalnızca ek açıklama ve açıklama işlemcileri içermesi gerektiği anlamına gelmez, ancak bir ek açıklama işlemcisi tarafından işlenmesi gereken herhangi bir sınıf içermemelidir. – Puce

İlgili konular