質問

カスタムアノテーションがあり、それはプロセッサーとプロセッサーファクトリーです。Ant ビルド ファイルを次のように構成するにはどうすればよいですか:

  1. アノテーション プロセッサはアノテーション付きクラスに適用され、「gen」フォルダー内にソース ファイルを生成します。

  2. アノテーション処理により生成されたソース ファイルは、プロジェクト内の他のソース ファイルで使用できます。

役に立ちましたか?

解決

これはきれいではありませんが、私がしていることです。 (ソース Javac Antタスク Javac Manページ)CompilerArg属性を使用すると、Javac Antタスクによって直接サポートされていない注釈処理関連の引数を渡すことができます。

<javac srcdir="${src}" destdir="${classes}" ... > 
     ....
     <compilerarg line="-processorpath ${processorpath}"/>
     <compilerarg line="-processor ${processor}"/>
     <compilerarg line="-s ${whereToPutGeneratedClassFiles}"/>
</javac>

私は使用しません aptツール ドキュメントが記載されているからです

APTツールはJDKフレームワークの不安定な部分であると思われるため、将来のバージョンでは根本的に変化する可能性があることをお勧めします。特に、JDK 6では、Javacの一部として注釈プロセッサを実行できるJDK 6で時代遅れになる可能性があります。

あなたが本当にコンパイラのargを気にしないなら、あなたはこのようなあなたの注釈プロセッサをjarすることができます

<jar destfile="${annotationprocessorjar}" ... >
     ...
     <service type="javax.annotation.processing.Processor" provider="${your.annotation.processor.fully.qualified.name}"/>
</jar>

そうすれば、できます

 <javac ... make sure ${annotationprocessorjar} is in classpath>
 </javac>

他のヒント

他の例のいくつかは、原因不明の変数であるため、いくつかのキービットがわずかに混乱していることがわかりました。これが私が終わったことです:

プロセッサジャーを構築するには:

<target name="build-aux">
    <mkdir dir="${build.dir}" />
    <mkdir dir="${build.classes}" />
    <javac destdir="${build.classes}" source="1.6" target="1.6">
        <src path="${src.java}" />
        <include name="com/acme/cli/Program.java" />
        <include name="com/acme/cli/ProgramProcessor.java" />
    </javac>

    <jar jarfile="acme-aux.jar" update="true">
        <manifest>
            <attribute name="Main-Class" value="${main.class}" />
            <attribute name="Implementation-Title" value="acme-aux" />
            <attribute name="Implementation-Version" value="${version}" />
            <attribute name="Implementation-Vendor" value="ACME, Inc" />
            <attribute name="Built-By" value="${user.name}" />
            <attribute name="Build-Date" value="${TODAY}" />
        </manifest>
        <fileset dir="${build.classes}">
            <!-- the annotation -->
            <include name="com/acme/cli/Program.class" />
            <!-- the annotation processor -->
            <include name="com/acme/cli/ProgramProcessor.class" />
        </fileset>
        <service type="javax.annotation.processing.Processor"
            provider="com.acme.cli.ProgramProcessor" />
    </jar>
</target>

次に、コードをコンパイルしてプロセッサを実行します。

<target name="compile" depends="generate,build-aux">
    <mkdir dir="${build.dir}" />
    <mkdir dir="${build.classes}" />
    <javac destdir="${build.classes}" source="1.6" target="1.6">
        <src path="${src.java}" />
        <include name="com/acme/**/*.java" />
        <!-- ensure that "acme-aux.jar" is in this classpath -->
        <classpath refid="compile.class.path"/>
         <!-- pass option to annotation processor -->
        <compilerarg value="-Aacme.version=${version}" />
    </javac>
</target>

これが私がEclipse/Antでそれをした方法です:

<javac destdir="bin"
  debug="true"
  debuglevel="${debuglevel}"
  compiler="javac1.6"
  srcdir="${src}">
       <include name="**/*.java"/> <!-- I just do it this way -->
 <classpath refid="classpath_ref_id"/>
 <compilerarg value="-processor" />
 <compilerarg value="${processor}" />
 <compilerarg value="-s" />
 <compilerarg value="${gen_src_target}" />
</javac>

ノート

  • プロセッサパスは *classpath_ref_id *に含まれています
  • プロセッサを実行します 実際のコードをコンパイルします(生成されたコードの有無にかかわらず)。

を見てみることができます アノテーション処理ツール、生成されたソースファイルを自動的にコンパイルします。

//編集//コメントへの返信:

apt と組み合わせて使用​​できます 適切なアリのタスク

しかし、jdk6 の時点では、javac ツールが提供します 注釈処理の直接サポート, したがって、使用できるはずです javac ant タスク コンパイラ属性が「javac1.6」として指定されている場合

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top