[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aspectj-users] Incremental Compilation 2

I’ve got the incremental compile working within eclipse using the message handler technique.  I created a class that implemented IMessageHolder and had empty/return null/return false for all methods except handleMessage


    public boolean handleMessage(IMessage arg0) throws AbortException {

        if (arg0.getMessage().equals("weaving")) {

            File file = new File("iajc.woven.tag");

            try {


            } catch (IOException e) {





        return false;



Don’t forget to include a no-argument constructor – otherwise it won’t work.


In the build.xml file, I have one task that starts the aspectJ compiler in the background and leaves it running.  I run this the first time I’m doing a build.



      <taskdef resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties">


            <pathelement location="build_lib/aspectjtools.jar"/>

            <pathelement location="bin"/>




I included my bin (eclipse build output directory) in my classpath so iajc could find my IMessageHandler implementation, which is in my applications general source tree.


      <target name="startCompiler" description="Start aspectJ compiler">

            <delete file="iajc.ant.tag"/>

            <touch file="iajc.ant.tag"/>

            <iajc destDir="${app.staging}/APP-INF/classes" tagfile="iajc.ant.tag" verbose="true" messageHolderClass="com.vms.adbase.util.CompileMessageHolder">


                        <pathelement location="appsrc"/>

                        <pathelement location="gen"/>

                        <pathelement location="testsrc"/>



                        <path refid="project.classpath"/>





Note: You can’t fork this task because fork will supercede messageHolderClass.


Then, the compile method in my normal build process contains the lines


            <delete file="iajc.woven.tag"/>

            <touch file="iajc.ant.tag"/>

            <echo>Touched iajc tag file</echo>

            <!-- sleep here until woven tag is present -->

            <waitfor maxwait="300" maxwaitunit="second">

                <available file="iajc.woven.tag"/>


            <!—deploy code goes here -->


The startCompiler task causes all messages to go through our custom handler, which detects the “weaving” message that occurs at the end of an incremental compile and creates a flag file.  The compile task deletes this flag file, touches the aspectJ compiler’s tag file to trigger an incremental build and then waits for the flag file to be re-created.


Kudos to Nick and and Wes for the start on this.