Bazı çalışma zamanı kablolamalarını yapacağım yeni bir açıklama oluşturmaya çalışıyorum, ancak, bir dizi nedenden dolayı, kablolarımın derleme zamanında doğrulanmasını istiyorum bazı ilkel çekler ile başarılı olacak. ParticularType
: Özel bir Soyut İşlemci oluşturma ve Eclipse ile entegrasyon
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation{
}
Şimdi derleme zamanında doğrulama çeşit yapmak istiyorum
gibiCustomAnnotation
belirli bir türdeki olduğunu annotates bu alanı kontrol edin:
varsayalım ben yeni bir ek açıklama oluşturun. Ben Java 6 çalışıyorum, bu yüzden bir AbstractProcessor
yarattı: buldum bazı talimatlara dayalı, Sonra
@SupportedAnnotationTypes("com.example.CustomAnnotation")
public class CompileTimeAnnotationProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv) {
Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(CustomAnnotation.class);
for(Element e : elements){
if(!e.getClass().equals(ParticularType.class)){
processingEnv.getMessager().printMessage(Kind.ERROR,
"@CustomAnnotation annotated fields must be of type ParticularType");
}
}
return true;
}
}
, bir klasör META-INF/services
oluşturulan ve içeriği ile bir dosyayı javax.annotation.processing.Processor
yarattı:
com.example.CompileTimeAnnotationProcessor
Sonra projeyi bir kavanoz olarak ihraç ettim. "Açıklama işlemeyi etkinleştir":> Ek Açıklama İşleme -
- Seti Java derleyicisi şu şekildedir: Eclipse proje özelliklerini konfigüre
public class TestClass { @CustomAnnotation private String bar; // not `ParticularType` }
: Başka bir projede
, ben basit bir test sınıfı inşa ve "Editörde işlemeyi etkinleştirme" - Dışa aktarılmış jar'ımı dahil etmek ve tam olarak nitelenmiş sınıfımın geldiği ilerlemeyi kontrol etmek için Java Derleyici -> Detaylandırma İşleme -> Fabrika Yolu'nu ayarlayın.
Projeyi yeniden oluşturmak için "Uygula" ve Eclipse komutlarını tıklattım, tamama vurdum - ancak ek açıklama işlemcisine rağmen hiçbir hata atılmıyor.
Nerede hata yaptım?
Ben
@CustomAnnotation açıklamalı alanlar tip ParticularType olmalıdır
javac
çıkışı ileolarakjavac -classpath "..\bin;path\to\tools.jar" -processorpath ..\bin -processor com.example.CompileTimeAnnotationProcessor com\test\TestClass.java
İlk olarak, ek açıklama işlemcisi Eclipse dışında javac ile çalışır mı? – antlersoft
@antlersoft: evet, düz javac ile Eclipse dışında çalışır (düzenlemeler bunu yansıtır). –
Eclipse'de Hata Günlüğünü kontrol ettiniz mi (Göremiyorsanız, Pencere> Görünümü Göster> Hata Günlüğü)? Bir açıklama işlemcisi başarısız olduğunda, bir hatayla açılan bir iletişim kutusu açılmayabilir, ancak hata günlüğünde bir hata görüntülenir. Ayrıca, işlemcinizde Messager.printMessage() 'i türetmek için işlemcinizde hata ayıklamasında da görüldüğü gibi, Eclipse'de işlemcinizde hata ayıklamaya çalışabilirsiniz. – prunge