diff options
Diffstat (limited to 'docs/examples/build.xml')
-rw-r--r-- | docs/examples/build.xml | 458 |
1 files changed, 458 insertions, 0 deletions
diff --git a/docs/examples/build.xml b/docs/examples/build.xml new file mode 100644 index 000000000..958c72727 --- /dev/null +++ b/docs/examples/build.xml @@ -0,0 +1,458 @@ + +<!-- ========================================================================= --> +<!-- 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 Eclipse Public License v 2.0 --> +<!-- which accompanies this distribution and is available at --> +<!-- https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt --> +<!-- --> +<!-- 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,tracing-lt,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,tracing-lt,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.loadtime.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> |