@SupportedAnnotationTypes({"com.tg.annotation.Table", "com.tg.annotation.Test"})
public class TgDaoGenerateProcessor extends AbstractProcessor {
private Messager messager;
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
messager = processingEnv.getMessager();
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
messager.printMessage(Diagnostic.Kind.NOTE, "annotations size " + annotations.size());
}
Iクリーンな出力ディレクトリ@Table
を注釈付きクラスと@Test
Java AbstractProcessorに関するいくつかの質問?私のプロジェクトで
注釈付きクラスを持っているとのIntelliJ、出力に2つのラインの構築:2つの行を持っている理由
annotations size 2
annotations size 0
を? javacは何をしましたか?
それを再構築すれば何も印刷されません。私はjavacが新しい.class
を生成しないようにソースコードを変更しないと思います。 @Table
で注釈を付けたクラスを修正して再構築すると、出力はannotations size 1
になります。私は@Test
注釈クラスを変更していないので、のAPTは@Table
の情報を得ることができません。
@Table
と@Test
というアノテーションが付いたクラス情報を取得し、それらを使用してxmlファイルを生成します。例を挙げる:クラスAは@Table
と注釈され、クラスBは@Test
と注釈され、APTはクラスAとBのフィールドとメソッドを取得し、それらを新しいファイルに書き込みます。したがって、クラスAのみを変更していくつかのフィールドとメソッドを変更するとします.BuildとAPTプロセッサは、@Test
というアノテートされたクラスBを取得できません。最新のxmlファイルを生成できません。確かに、私は出力ディレクトリをきれいにして再構築しますが、それはうまくいくでしょうが、そのようなことをする人はいません。だから誰もクラスを変更する、どのようにAPTプロセッサはすべてのクラス情報を取得することができます。
質問は明らかではありません、plz [ask]を参照してください。 – EJoshuaS
['Processor'](http://docs.oracle.com/javase/8/docs/api/javax/annotation/processing/Processor.html)のドキュメントを読む必要があります。それはもっと多くの細部を持ち、この種のことを説明します。 – Radiodef