| |
| <!-- ========================================================================= --> |
| <!-- Copyright (c) 1999-2001 Xerox Corporation, --> |
| <!-- 2002 Palo Alto Research Center, Incorporated (PARC). --> |
| <!-- All rights reserved. --> |
| <!-- This program and the accompanying materials are made available --> |
| <!-- under the terms of the Common Public License v1.0 --> |
| <!-- which accompanies this distribution and is available at --> |
| <!-- http://www.eclipse.org/legal/cpl-v10.html --> |
| <!-- --> |
| <!-- Contributors: --> |
| <!-- Xerox/PARC initial implementation --> |
| <!-- ========================================================================= --> |
| |
| <project name="aspectj-examples" default="spacewar" basedir="."> |
| |
| <target name="info" > |
| <echo> |
| This script builds the AspectJ examples. |
| |
| Relevant targets: |
| spacewar build and run spacewar with debugging (default) |
| all build and run each example |
| {example} build and run any {example} |
| (use -projecthelp to list {example} names) |
| tracing-bc use AspectJ 1.1 bytecode weaving to build tracing example |
| |
| Setup: |
| - Run from the doc/examples directory in your AspectJ distribution. |
| The tasks in ../../lib/aspectjtools.jar are used automatically. |
| |
| Variants: |
| - To avoid running (i.e., compile only), define variable "norun" |
| - To define a variable, use the Ant -D option - e.g., on Windows: |
| |
| ant -f build.xml -DJAVA_HOME=c:\jdk1.3.1 -Dnorun=skip |
| |
| </echo> |
| </target> |
| |
| <!-- ============================================================= --> |
| <!-- setup and cleanup targets --> |
| <!-- ============================================================= --> |
| |
| <target name="clean" depends="init" |
| description="clean and create classes/jar dir, .ajesym files"> |
| <delete quiet="on" dir="${classes.dir}"/> |
| <delete quiet="on" dir="${jar.dir}"/> |
| <delete quiet="on"> |
| <fileset dir="${example.dir}" includes="**/*.ajesym"/> |
| </delete> |
| <mkdir dir="${classes.dir}"/> |
| <mkdir dir="${jar.dir}"/> |
| </target> |
| |
| <target name="init" depends="init.variables,init.taskdefs"/> |
| |
| <target name="init.variables" |
| description="init variables"> |
| |
| <!-- build.compiler value to pick up our CompilerAdapter for javac --> |
| <property name="ajc.adapter" |
| value="org.aspectj.tools.ant.taskdefs.Ajc11CompilerAdapter"/> |
| |
| <!-- required directories - run from examples or predefine --> |
| <property name="example.dir" |
| location="${basedir}"/> |
| <property name="aspectj.lib.dir" |
| location="${basedir}/../../lib"/> |
| |
| <!-- required libraries - install or predefine --> |
| <property name="aspectjrt.jar" |
| location="${aspectj.lib.dir}/aspectjrt.jar"/> |
| <property name="aspectjtools.jar" |
| location="${aspectj.lib.dir}/aspectjtools.jar"/> |
| <property name="aspectjweaver.jar" |
| location="${aspectj.lib.dir}/aspectjweaver.jar"/> |
| |
| <!-- created directories --> |
| <property name="classes.dir" |
| location="${example.dir}/classes"/> |
| <property name="jar.dir" |
| location="${example.dir}/jars"/> |
| |
| <!-- checking required libraries --> |
| <available file="${aspectjtools.jar}" |
| property="aspectjtools.jar.available"/> |
| <available file="${aspectjrt.jar}" |
| property="aspectjrt.jar.available"/> |
| |
| <property name="example.packages" |
| value="bean, coordination, evolution, figures, figures.gui, |
| helloworld, icount, icount.lib, introduction, |
| observer, shadow, shadow.version1, shadow.version2, |
| spacewar, telecom, telecom.version1, timeserver, tjp, |
| tracing, tracing.lib tracing.version1, tracing.version2, |
| tracing.version3"/> |
| </target> |
| |
| <target name="init.taskdefs" depends="init.variables, |
| aspectjtools.jar.available, |
| aspectjrt.jar.available" |
| unless="taskdefs.init"> |
| <!-- sets name of new task to iajc, old task to ajc --> |
| <taskdef resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties"> |
| <classpath> |
| <pathelement path="${aspectjtools.jar}"/> |
| </classpath> |
| </taskdef> |
| <property name="taskdefs.init" value="true"/> |
| </target> |
| |
| <!-- targets to fail unless required libraries available --> |
| |
| <target name="aspectjrt.jar.available" depends="init.variables" |
| unless="aspectjrt.jar.available" > |
| <fail message="expecting aspectjrt.jar at ${aspectjrt.jar}"/> |
| </target> |
| |
| <target name="aspectjtools.jar.available" depends="init.variables" |
| unless="aspectjtools.jar.available" > |
| <fail message="expecting aspectjtools.jar at ${aspectjtools.jar}"/> |
| </target> |
| |
| <!-- ============================================================= --> |
| <!-- these targets compile and run any example --> |
| <!-- ============================================================= --> |
| <target name="Ajx" depends="init" |
| description="compile {list} and run {class} of example"> |
| <echo message="##### Ajx list=${list} class=${class}" /> |
| <antcall target="clean" /> |
| <!-- can use ajc or iajc here --> |
| <iajc destdir="${classes.dir}" argfiles="${list}" |
| fork="true" |
| forkclasspath="${aspectjtools.jar}" |
| classpath="${aspectjrt.jar}"/> |
| |
| <antcall target="Ajx-run" > |
| <param name="class" value="${class}"/> |
| </antcall> |
| |
| </target> |
| |
| <target name="Ajx-run" |
| description="run {class} unless {norun} is set" |
| unless="norun" > |
| <echo message="##### Ajx-run list=${list} class=${class}" /> |
| <java classname="${class}" fork="yes"> |
| <classpath> |
| <pathelement path="${classes.dir}"/> |
| <pathelement path="${aspectjrt.jar}"/> |
| </classpath> |
| </java> |
| </target> |
| |
| <!-- ============================================================= --> |
| <!-- example targets --> |
| <!-- ============================================================= --> |
| <target name="all" |
| description="build and run all examples" |
| depends="bean,intro,intro-clone,intro-compare,intro-hash, |
| observer,spacewar,spacewar-demo,telecom, |
| telecom-timing,tracing-none,tracing-1, |
| tracing-2,tracing-3,tjp"/> |
| |
| <target name="nonGui" |
| description="build and run non-GUI examples" |
| depends="bean,intro,intro-clone,intro-compare,intro-hash, |
| telecom,telecom-timing,tracing-none,tracing-1, |
| tracing-2,tracing-3,tjp"/> |
| |
| <target name="bean" |
| description="build bean example"> |
| <antcall target="Ajx"> |
| <param name="list" value="bean/files.lst"/> |
| <param name="class" value="bean.Demo"/> |
| </antcall> |
| </target> |
| |
| <target name="intro" |
| description="build inter-type declaration example"> |
| <antcall target="Ajx"> |
| <param name="list" value="introduction/files.lst"/> |
| <param name="class" value="introduction.Point"/> |
| </antcall> |
| </target> |
| |
| <target name="intro-clone" |
| description="build inter-type declaration (clone) example"> |
| <antcall target="Ajx"> |
| <param name="list" value="introduction/files.lst"/> |
| <param name="class" value="introduction.CloneablePoint"/> |
| </antcall> |
| </target> |
| |
| <target name="intro-compare" |
| description="build inter-type declaration (Comparable) example"> |
| <antcall target="Ajx"> |
| <param name="list" value="introduction/files.lst"/> |
| <param name="class" value="introduction.ComparablePoint"/> |
| </antcall> |
| </target> |
| |
| <target name="intro-hash" |
| description="build inter-type declaration (hashcode) example"> |
| <antcall target="Ajx"> |
| <param name="list" value="introduction/files.lst"/> |
| <param name="class" value="introduction.HashablePoint"/> |
| </antcall> |
| </target> |
| |
| <target name="observer" |
| description="build observer example"> |
| <antcall target="Ajx"> |
| <param name="list" value="observer/files.lst"/> |
| <param name="class" value="observer.Demo"/> |
| </antcall> |
| </target> |
| |
| <target name="spacewar" |
| description="build spacewar debug example"> |
| <antcall target="Ajx"> |
| <param name="list" value="spacewar/debug.lst"/> |
| <param name="class" value="spacewar.Game"/> |
| </antcall> |
| </target> |
| |
| <target name="spacewar-demo" |
| description="build spacewar demo (no debug) example"> |
| <antcall target="Ajx"> |
| <param name="list" value="spacewar/demo.lst"/> |
| <param name="class" value="spacewar.Game"/> |
| </antcall> |
| </target> |
| |
| <target name="telecom" |
| description="build telecom basic example"> |
| <antcall target="Ajx"> |
| <param name="list" value="telecom/basic.lst"/> |
| <param name="class" value="telecom.BasicSimulation"/> |
| </antcall> |
| </target> |
| |
| <target name="telecom-billing" |
| description="build telecom billing example"> |
| <antcall target="Ajx"> |
| <param name="list" value="telecom/billing.lst"/> |
| <param name="class" value="telecom.BillingSimulation"/> |
| </antcall> |
| </target> |
| |
| <target name="telecom-timing" |
| description="build telecome timing example"> |
| <antcall target="Ajx"> |
| <param name="list" value="telecom/timing.lst"/> |
| <param name="class" value="telecom.TimingSimulation"/> |
| </antcall> |
| </target> |
| |
| <target name="tjp" |
| description="build thisJoinPoint example"> |
| <antcall target="Ajx"> |
| <param name="list" value="tjp/files.lst"/> |
| <param name="class" value="tjp.Demo"/> |
| </antcall> |
| </target> |
| |
| <target name="tracing-none" |
| description="build tracing (base) example"> |
| <antcall target="Ajx"> |
| <param name="list" value="tracing/notrace.lst"/> |
| <param name="class" value="tracing.ExampleMain"/> |
| </antcall> |
| </target> |
| |
| <target name="tracing-1" |
| description="build tracing (version 1) example"> |
| <antcall target="Ajx"> |
| <param name="list" value="tracing/tracev1.lst"/> |
| <param name="class" value="tracing.version1.TraceMyClasses"/> |
| </antcall> |
| </target> |
| |
| <target name="tracing-2" |
| description="build tracing (version 2) example"> |
| <antcall target="Ajx"> |
| <param name="list" value="tracing/tracev2.lst"/> |
| <param name="class" value="tracing.version2.TraceMyClasses"/> |
| </antcall> |
| </target> |
| |
| <target name="tracing-3" |
| description="build tracing (version 3) example"> |
| <antcall target="Ajx"> |
| <param name="list" value="tracing/tracev3.lst"/> |
| <param name="class" value="tracing.version3.TraceMyClasses"/> |
| </antcall> |
| </target> |
| |
| <!-- ============================================================= --> |
| <!-- do tracing example using compiler adapter --> |
| <!-- ============================================================= --> |
| <target name="tracing-adapter" depends="init" |
| description="tracing example compiled via javac task"> |
| <antcall target="clean" /> |
| <!-- to fork, set adapter.fork=true |
| and put aspectjtools.jar on ant classpath --> |
| <javac destdir="${classes.dir}" |
| fork="${adapter.fork}"> |
| <src path="${example.dir}"/> |
| <include name="tracing/*.java"/> |
| |
| <!-- compilerarg's ignored unless using our compiler adapter --> |
| <compilerarg compiler="${ajc.adapter}" |
| line="-verbose -Xlint -proceedOnError"/> |
| <!-- use separate values if a path might have spaces --> |
| <compilerarg compiler="${ajc.adapter}" |
| value="-classpath"/> |
| <compilerarg compiler="${ajc.adapter}" |
| value="${aspectjrt.jar}"/> |
| <compilerarg compiler="${ajc.adapter}" |
| path="${example.dir}/tracing/version3/Trace.java"/> |
| <compilerarg compiler="${ajc.adapter}" |
| path="${example.dir}/tracing/version3/TraceMyClasses.java"/> |
| </javac> |
| </target> |
| |
| <target name="tracing-adapter-ajc" depends="init" |
| description="tracing example compiled using ajc via compiler adapter"> |
| <!-- aspectjtools.jar must be on system/ant classpath --> |
| <antcall target="tracing-adapter"> |
| <param name="build.compiler" value="${ajc.adapter}"/> |
| </antcall> |
| </target> |
| |
| <!-- ============================================================= --> |
| <!-- do tracing example with 1.1 bytecode weaving (binary aspects) --> |
| <!-- (and use fork/forkclasspath to avoid Eclipse 2.x bug) --> |
| <!-- ============================================================= --> |
| <target name="tracing-bc" depends="init" |
| description="tracing example with bytecode weaving (binary aspects)"> |
| <antcall target="clean" /> |
| |
| <!-- build application classes --> |
| <iajc outjar="${jar.dir}/tracingApp.jar" |
| classpath="${aspectjrt.jar}" |
| fork="true" |
| forkclasspath="${aspectjtools.jar}" |
| verbose="off"> |
| <src path="${example.dir}"/> |
| <include name="tracing/*.java" /> |
| </iajc> |
| |
| <!-- test standalone application by running without tracing --> |
| <echo message="---------- running without tracing - START"/> |
| <java classname="tracing.ExampleMain"> |
| <classpath> |
| <pathelement path="${aspectjrt.jar}"/> |
| <pathelement path="${jar.dir}/tracingApp.jar"/> |
| </classpath> |
| </java> |
| <echo message="---------- running without tracing - FINISH "/> |
| |
| <!-- Build a read-only tracing library --> |
| <iajc outjar="${jar.dir}/tracingLib.jar" |
| classpath="${aspectjrt.jar}" |
| fork="true" |
| forkclasspath="${aspectjtools.jar}" |
| verbose="off"> |
| <src path="${example.dir}"/> |
| <include name="tracing/version3/Trace.java" /> |
| </iajc> |
| |
| <!-- weave them --> |
| <!-- This example uses a concrete aspect in source form, --> |
| <!-- but the aspects could be written to be binary only. --> |
| <iajc outjar="${jar.dir}/tracedApp.jar" |
| inpath="${jar.dir}/tracingApp.jar" |
| aspectpath="${jar.dir}/tracingLib.jar" |
| classpath="${aspectjrt.jar}" |
| fork="true" |
| forkclasspath="${aspectjtools.jar}" |
| verbose="off"> |
| <src path="${example.dir}"/> |
| <include name="tracing/version3/TraceMyClasses.java" /> |
| </iajc> |
| |
| <!-- run with tracing --> |
| <echo message="---------- running with tracing - START"/> |
| <java classname="tracing.version3.TraceMyClasses"> |
| <classpath> |
| <pathelement path="${aspectjrt.jar}"/> |
| <pathelement path="${jar.dir}/tracingLib.jar"/> |
| <pathelement path="${jar.dir}/tracedApp.jar"/> |
| </classpath> |
| </java> |
| <echo message="---------- running with tracing - FINISH"/> |
| |
| </target> |
| |
| <!-- ============================================================= --> |
| <!-- do tracing example with 1.2 load-time weaving --> |
| <!-- (and use fork/forkclasspath to avoid Eclipse 2.x bug) --> |
| <!-- ============================================================= --> |
| <target name="tracing-lt" depends="init" |
| description="tracing example with load-time aspect weaving"> |
| <antcall target="clean" /> |
| |
| <!-- build application classes --> |
| <iajc outjar="${jar.dir}/tracingApp.jar" |
| classpath="${aspectjrt.jar}" |
| fork="true" |
| forkclasspath="${aspectjtools.jar}" |
| verbose="off"> |
| <src path="${example.dir}"/> |
| <include name="tracing/*.java" /> |
| </iajc> |
| |
| <!-- Build a read-only tracing library --> |
| <iajc outjar="${jar.dir}/tracingLib.jar" |
| classpath="${aspectjrt.jar}:${jar.dir}/tracingApp.jar" |
| fork="true" |
| forkclasspath="${aspectjtools.jar}" |
| verbose="off"> |
| <src path="${example.dir}"/> |
| <include name="tracing/version2/Trace.java" /> |
| <include name="tracing/version2/TraceMyClasses.java" /> |
| </iajc> |
| |
| <!-- test standalone application by running without tracing --> |
| <echo message="---------- running without tracing - START"/> |
| <java classname="tracing.ExampleMain"> |
| <classpath> |
| <pathelement path="${aspectjrt.jar}"/> |
| <pathelement path="${jar.dir}/tracingApp.jar"/> |
| </classpath> |
| </java> |
| <echo message="---------- running without tracing - FINISH "/> |
| |
| <!-- run application with LTW to add tracing --> |
| <echo message="---------- running with tracing - START"/> |
| <java classname="tracing.ExampleMain" |
| fork="true"> |
| <classpath> |
| <pathelement path="${aspectjweaver.jar}"/> |
| </classpath> |
| <jvmarg line="-showversion"/> |
| <sysproperty key="java.system.class.loader" value="org.aspectj.weaver.WeavingURLClassLoader"/> |
| <sysproperty key="aj.weaving.verbose" value="True"/> |
| <sysproperty key="org.aspectj.weaver.showWeaveInfo" value="True"/> |
| <sysproperty key="aj.class.path" path="${jar.dir}/tracingLib.jar:${jar.dir}/tracingApp.jar"/> |
| <sysproperty key="aj.aspect.path" path="${jar.dir}/tracingLib.jar"/> |
| </java> |
| <echo message="---------- running with tracing - FINISH"/> |
| |
| </target> |
| |
| </project> |