首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Ant的Java 6批注处理配置

使用Ant的Java 6批注处理配置
EN

Stack Overflow用户
提问于 2010-09-05 05:28:29
回答 4查看 15K关注 0票数 18

我有一个自定义注释,它是processor & processorFactory。如何配置我的Ant构建文件,以便:

  1. 批注处理器应用于带批注的类,并在"gen“文件夹中生成源文件
  2. 生成的源文件(来自批注处理)可供项目中的其他源文件使用。
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-05 09:21:42

这不是很好,但这就是我所做的。(源代码javac ant task javac man page)使用编译器属性,我可以在批注处理中传入javac ant任务不直接支持的相关参数。

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

我不使用APT tool,因为文档说明

请注意,Apt工具似乎确实是JDK框架中不稳定的部分,因此在未来的版本中可能会发生根本性的变化。特别是,它在JDK 6中可能会过时,JDK 6可以将批注处理器作为javac的一部分运行。

如果您真的不关心编译器参数,那么可以像这样将批注处理器打包成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>
票数 11
EN

Stack Overflow用户

发布于 2013-08-02 22:46:05

我发现其他一些例子有点令人困惑,因为其中一些关键比特是无法解释的变量。这是我最终得到的结论:

要构建处理器jar,请执行以下操作:

<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>
票数 2
EN

Stack Overflow用户

发布于 2010-12-07 02:53:28

下面是我在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*

  • Run
  • 中(使用或不使用生成的代码)。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3644069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档