8

質問は明らかなようですが、実装は私にとってかなり難しいです。

私の目標は、Annotation Processor によって生成された別のクラスを必要とするいくつかのクラスをコンパイルする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 プロセッサの実装用に .class ファイルをコンパイルしています。2タスク目で止まっています。

アントは次のように述べています。Annotation processing without compilation requested but no processors were found.

私は何を間違っていますか?たぶん、注釈プロセッサ クラスを.jar?に配置する必要があります。-processorpathまたは、引数として .class 拡張子を持つファイル名を指定しますか? いくつかのオプションを試しましたが、何も役に立ちません..


ノート:

ドキュメントでは、apt ツールとAPI が非推奨であると主張されているため、1 つではなくantjavacタスクを使用しています。この質問にも目を通しましたが、プロセッサを正しい方法でコンパイルする方法についての情報はありません。aptcom.sun.mirror

私は使用しています:

  • Java 1.6
  • アリ 1.8.2
4

1 に答える 1