将.aj文件编织到现有的javac编译源中

时间:2011-11-16 15:19:48

标签: binary aspectj javac

我正在尝试使用javac将一组java文件编译为.class文件,然后使用iajc编译并编织所有方面。我的ant build.xml看起来像这样。

编译部分:

<target name="compile" depends="init" description="compile the source ">
    <!-- Compile the java code from ${src} into ${target} -->
    <javac srcdir="${src}" destdir="${target}" debug="true">
        <classpath refid="project.class.path" />
    </javac>
</target>

iajc部分:

<target name="aspects">
    <mkdir dir="dist"/>     
    <iajc source="1.6" target="${asptarget}">
        <inpath>
            <pathelement location="${target}"/>
        </inpath>
        <sourceroots>
            <fileset dir="${src}">
                <include name="**/*.aj"/>
            </fileset>
        </sourceroots>
         <classpath>
              <pathelement location="${aspectj.home}/lib/aspectjrt.jar"/>
        </classpath>
    </iajc>
</target>

根据错误消息判断,我没有说明这一点。源根本错了! 如何使用aspectj编译.aj文件,然后二进制编译类文件和编译的.aj文件?如果没有重新编译所有原始java源代码,这是否可能?

1 个答案:

答案 0 :(得分:1)

如果要使用常规编译器构建.java文件,使用iajc构建.aj文件,请执行以下操作:

<target name="aspects" depends="compile" description="build binary aspects">
    <fileset id="ajFileSet" dir="${src}" includes="**/*.aj"/>
    <pathconvert pathsep="${line.separator}" property="ajFiles" refid="ajFileSet"/>
    <echo file="${src}/aj-files.txt">${ajFiles}</echo>

    <iajc source="1.6" target="${asptarget}">
        <argfiles>
            <pathelement location="${src}/aj-files.txt"/>
        </argfiles>

        <classpath>             
            <pathelement path="${target}"/>
            <fileset dir="lib" includes="**/*.jar"/>
        </classpath>
         <classpath>
              <pathelement location="${aspectj.home}/lib/aspectjrt.jar"/>
        </classpath>
    </iajc>
</target>

通过构建包含.aj文件列表并编译它们的文件来完美地工作。然后,您可以使用运行时OR二进制编织来完成该过程。