aboutsummaryrefslogtreecommitdiffstats
path: root/docs/devguide/antsupport.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'docs/devguide/antsupport.adoc')
-rw-r--r--docs/devguide/antsupport.adoc878
1 files changed, 878 insertions, 0 deletions
diff --git a/docs/devguide/antsupport.adoc b/docs/devguide/antsupport.adoc
new file mode 100644
index 000000000..6c8217930
--- /dev/null
+++ b/docs/devguide/antsupport.adoc
@@ -0,0 +1,878 @@
+[[antTasks]]
+== AspectJ Ant Tasks
+
+[[antTasks-intro]]
+=== Introduction
+
+AspectJ contains a compiler, `ajc`, that can be run from Ant. Included
+in the `aspectjtools.jar` are Ant binaries to support three ways of
+running the compiler:
+
+[arabic]
+. xref:#antTasks-iajc[AjcTask (iajc)], a task to run the AspectJ
+post-1.1 compiler, which supports all the eclipse and ajc options,
+including incremental mode.
+. xref:#antTasks-adapter[Ajc11CompilerAdapter (javac)], an adapter class
+to run the new compiler using Javac tasks by setting the build.compiler
+property
+. xref:#antTasks-ajc[Ajc10 (ajc)], a task to run build scripts
+compatible with the AspectJ 1.0 tasks
+
+This describes how to install and use the tasks and the adapter. For an
+example Ant script, see xref:../examples/build.xml[examples/build.xml].
+
+[[antTasks-install]]
+=== Installing Ant Tasks
+
+Install Jakarta Ant 1.5.1: Please see the official Jakarta Ant website
+for more information and the 1.5.1 distribution. This release is
+source-compatible with Ant 1.3 and Ant 1.4, but the task sources must be
+compiled with those versions of the Ant libraries to be used under those
+versions of Ant. Sources are available under the Eclipse Public License
+v 2.0 at https://eclipse.org/aspectj.
+
+In Ant 1.5, third-party tasks can be declared using a taskdef entry in
+the build script, to identify the name and classes. When declaring a
+task, include the `aspectjtools.jar` either in the taskdef classpath or
+in `${ANT_HOME}/lib` where it will be added to the system class path by
+the ant script. You may specify the task script names directly, or use
+the "resource" attribute to specify the default names:
+
+[source, xml]
+....
+<taskdef resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties"/>
+....
+
+The current resource file retains the name "ajc" for the Ajc10 task, and
+uses "iajc" for the AspectJ post-1.1 task.
+
+In Ant 1.6, third-party tasks are declared in their own namespace using
+`antlib.xml`. For example, the following script would build and run the
+spacewar example, if you put the script in the examples directory and
+`aspectjtools.jar` in the `${ANT_HOME}/lib` directory.
+
+[source, xml]
+....
+<project name="aspectj-ant1.6" default="spacewar"
+ xmlns:aspectj="antlib:org.aspectj" basedir=".">
+ <target name="spacewar">
+ <aspectj:iajc
+ argfiles="spacewar/debug.lst"
+ outjar="spacewar.jar"
+ classpath="../../lib/aspectjrt.jar"
+ />
+ <java classname="spacewar.Game"
+ classpath="spacewar.jar:../../lib/aspectjrt.jar"/>
+ </target>
+</project>
+....
+
+For more information on using Ant, please refer to Jakarta's
+documentation on integrating user-defined Ant tasks into builds.
+
+[[antTasks-iajc]]
+=== AjcTask (iajc)
+
+This task uses the AspectJ post-1.1 compiler ajc. The AspectJ compiler
+can be used like Javac to compile Java sources, but it can also compile
+AspectJ sources or weave binary aspects with Java bytecode. It can run
+in normal "batch" mode or in an "incremental" mode, where it only
+recompiles files it has to revisit. For more information on ajc, see
+xref:ajc.adoc[`ajc`, the AspectJ compiler/weaver]. Unlike Javac or the Javac Ant task, this task always
+compiles the specified files since aspects can apply to other (updated)
+files. For a workaround, see xref:#antTasks-iajc-uptodate[Avoiding clean
+compiles].
+
+Beyond the normal ajc compiler options, this task also supports an
+experimental option for an incremental "tag" file, and it can copy
+resources from source directories or input jars to the output jar or
+directory.
+
+This task is named iajc to avoid conflict with the 1.0 task ajc.
+
+[[antTasks-iajc-options]]
+==== AjcTask (iajc) Options
+
+The following tables list the supported parameters. For any parameter
+specified as a Path, a single path can be specified directly as an
+attribute, multiple paths can be specified using a nested element of the
+same name, and a common path can be reused by defining it as a global
+and passing the id to the corresponding \{name}ref attribute. See
+xref:#antTasks-iajc-paths[Path] below for more details.
+
+Most attributes and nested elements are optional. The compiler requires
+that the same version of `aspectjrt.jar` be specified on the classpath,
+and that some sources be be specified (using one or more of
+`sourceroots`, `injars`, `inpath`, `argfiles`, and/or `srcdir` (with
+patterns)). When in incremental mode, only `sourceroots` may be
+specified.
+
+Boolean parameters default to `false` unless otherwise stated.
+
+*AjcTask (iajc) options for specifying sources*
+
+[cols=",",options="header",]
+|===
+|Attribute |Description
+|argfiles, argfilesRef (xref:#antTasks-iajc-paths[Path]) |An argument
+file contains a list of arguments read by the compiler. Each line is
+read into one element of the argument array and may include another
+argfile by reference.
+
+|sourceRoots, sourceRootsRef (xref:#antTasks-iajc-paths[Path])
+|Directories containing source files (ending with .java or .aj) to
+compile.
+
+|srcdir (xref:#antTasks-iajc-paths[Path]) |Base directory of sources to
+compile, assuming there are xref:#antTasks-nested-includes[nested
+matches]. This approach uses the Ant process for matching .java files
+and is not compatible with incremental mode. Unless using filters to
+limit the sources included, use sourceroots instead.
+
+|injars, injarsRef (xref:#antTasks-iajc-paths[Path]) |Deprecated - use
+inpath instead. Read .class files for bytecode weaving from zip files
+(only).
+
+|inpath, inpathRef (xref:#antTasks-iajc-paths[Path]) |Read .class files
+for bytecode weaving from directories or zip files (like classpath).
+
+|classpath, classpathRef (xref:#antTasks-iajc-paths[Path]) |The
+classpath used by the sources being compiled. When compiling aspects,
+include the same version of the `aspectjrt.jar`.
+
+|bootclasspath, bootclasspathRef (xref:#antTasks-iajc-paths[Path]) |The
+bootclasspath specifies types to use instead of the invoking VM's when
+seeking types during compilation.
+
+|extDirs, extDirsRef (xref:#antTasks-iajc-paths[Path]) |The extension
+directories to use instead of those in the invoking VM when seeking
+types during compilation.
+
+|aspectPath, aspectPathRef (xref:#antTasks-iajc-paths[Path]) |Similar to
+classpath, aspectpath contains read-only, binary aspect libraries that
+are woven into sources but not included in the output. `aspectpath`
+accepts jar/zip files (but, unlike classpath, not directories).
+|===
+
+*AjcTask (iajc) options for specifying output*
+
+[cols=",",options="header",]
+|===
+|Attribute |Description
+|destDir |The directory in which to place the generated class files.
+Only one of `destDir` and `outJar` may be set.
+
+|outJar |The zip file in which to place the generated output class
+files. Only one of `destDir` and `outJar` may be set.
+
+|copyInjars |(Deprecated/ignored; ajc does this.) If true, copy all
+non-.class files from input jar(s) to the output jar or destination
+directory after the compile (or incremental compile) completes. In
+forked mode, this copies only after the process completes, not after
+incremental compiles.
+
+|sourceRootCopyFilter |When set, copy all files from the sourceroot
+directories to the output jar or destination directory except those
+specified in the filter pattern. The pattern should be compatible with
+an Ant fileset excludes filter; when using this, most developers pass
+`**/CVS/*,**/*.java` to exclude any CVS directories or source files. See
+`inpathDirCopyFilter`. Requires `destDir` or `outJar`.
+
+|inpathDirCopyFilter |When set, copy all files from the inpath
+directories to the output jar or destination directory except those
+specified in the filter pattern. The pattern should be compatible with
+an Ant fileset excludes filter; when using this, most developers pass
+`**/CVS/*,**/*.java,**/*.class` to exclude any CVS directories, source
+files, or unwoven .class files. (If `**/*.class` is not specified, it
+will be prepended to the filter.) See `sourceRootCopyFilter`. (Note that
+ajc itself copies all resources from input jar/zip files on the inpath.)
+Requires `destDir` or `outJar`.
+|===
+
+*AjcTask (iajc) options for specifying compiler behavior*
+
+[cols=",",options="header",]
+|===
+|Attribute |Description
+|fork |Run process in another VM. This gets the forking classpath either
+explicitly from a `forkclasspath` entry or by searching the task or
+system/Ant classpath for the first readable file with a name of the form
+`aspectj{-}tools{.*}.jar`. When forking you can specify the amount of
+memory used with `maxmem`. Fork cannot be used in incremental mode,
+unless using a tag file.
+
+|forkclasspath, forkclasspathRef (xref:#antTasks-iajc-paths[Path])
+|Specify the classpath to use for the compiler when forking.
+
+|maxmem |The maximum memory to use for the new VM when fork is true.
+Values should have the same form as accepted by the VM, e.g., "128m".
+
+|incremental |incremental mode: Build once, then recompile only required
+source files when user provides input. Requires that source files be
+specified only using `sourceroots`. Incompatible with forking.
+
+|tagfile |incremental mode: Build once, then recompile only required
+source files when the tag file is updated, finally exiting when tag file
+is deleted. Requires that source files be specified only using
+`sourceroots`.
+
+|X |Set experimental option(s), using comma-separated list of accepted
+options Options should not contain the leading X. Some commonly-used
+experimental options have their own entries. The other permitted ones
+(currently) are serializableAspects, incrementalFile, lazyTjp,
+reweavable, notReweavable, noInline, terminateAfterCompilation,
+ajruntimelevel:1.2, and ajruntimelevel:1.5. Of these, some were
+deprecated in AspectJ 5 (reweavable, terminateAfterCompilation, etc.).
+
+|XterminateAfterCompilation |Terminates before the weaving process,
+dumping out unfinished class files.
+|===
+
+*AjcTask (iajc) options for specifying compiler side-effects and
+messages*
+
+[cols=",",options="header",]
+|===
+|Attribute |Description
+|emacssym |If true, emit `.ajesym` symbol files for Emacs support.
+
+|crossref |If true, emit `.ajsym` file into the output directory.
+
+|verbose |If true, log compiler verbose messages as Project.INFO during
+the compile.
+
+|logCommand |If true, log compiler command elements as Project.INFO
+(rather than the usual Project.VERBOSE level).
+
+|Xlistfileargs |If true, emit list of file arguments during the compile
+(but behaves now like verbose).
+
+|version |If true, do not compile - just print AspectJ version.
+
+|help |If true, just print help for the command-line compiler.
+
+|Xlintwarnings |Same as `xlint:warning`: if true, set default level of
+all language usage messages to warning.
+
+|Xlint |Specify default level of all language usage messages to one of
+[`error warning ignore`].
+
+|XlintFile |Specify property file containing `name:level` associations
+setting level for language messages emitted during compilation. Any
+levels set override the default associations in
+`org/aspectj/weaver/XLintDefault.properties`.
+
+|failonerror |If true, throw BuildException to halt build if there are
+any compiler errors. If false, continue notwithstanding compile errors.
+Defaults to `true`.
+
+|messageHolderClass |Specify a class to use as the message holder for
+the compile process. The entry must be a fully-qualified name of a class
+resolveable from the task classpath complying with the
+`org.aspectj.bridge.IMessageHolder` interface and having a public
+no-argument constructor.
+
+|showWeaveInfo |If true, emit weaver messages. Defaults to `false`.
+|===
+
+*AjcTask (iajc) options for specifying Eclipse compiler options*
+
+[cols=",",options="header",]
+|===
+|Attribute |Description
+|nowarn |If true, same as `warn:none`.
+
+|deprecation |If true, same as `warn:deprecation`
+
+|warn |One or more comma-separated warning specifications from
+[`constructorName packageDefaultMethod deprecation,
+ maskedCatchBlocks unusedLocals unusedArguments,
+ unusedImports syntheticAccess assertIdentifier`].
+
+|debug |If true, same as `debug:lines,vars,source`
+
+|debugLevel |One or more comma-separated debug specifications from
+[`lines vars source`].
+
+|PreserveAllLocals |If true, code gen preserves all local variables (for
+debug purposes).
+
+|noimporterror |If true, emit no errors for unresolved imports.
+
+|referenceinfo |If true, compute reference info.
+
+|log |File to log compiler messages to.
+
+|encoding |Default source encoding format (per-file encoding not
+supported in Ant tasks).
+
+|proceedOnError |If true, keep compiling after errors encountered,
+dumping class files with problem methods.
+
+|progress |If true, emit progress (requires log).
+
+|time |If true, display speed information.
+
+|target |Specify target class file format as one of [`1.1 1.2`].
+Defaults to 1.1 class file.
+
+|source |Set source compliance level to one of [`1.3 1.4 1.5`] (default
+is 1.4). 1.3 implies -source 1.3 and -target 1.1. 1.4 implies -source
+1.4 and -target 1.2. 1.5 implies -source 1.5 and -target 1.5.
+
+|source |Set source assertion mode to one of [`1.3 1.4`]. Default
+depends on compliance mode.
+|===
+
+[[antTasks-nested-includes]]
+==== AjcTask matching parameters specified as nested elements
+
+This task forms an implicit FileSet and supports all attributes of
+`fileset` (dir becomes srcdir) as well as the nested `include`,
+`exclude`, and `patternset` elements. These can be used to specify
+source files. However, it is better to use `sourceroots` to specify
+source directories unless using filters to exclude some files from
+compilation.
+
+[[antTasks-iajc-paths]]
+==== AjcTask Path-like Structures
+
+Some parameters are path-like structures containing one or more
+elements; these are `sourceroots`, `argfiles`, `injars`, `inpath`,
+`classpath`, `bootclasspath`, `forkclasspath`, and `aspectpath`. In all
+cases, these may be specified as nested elements, something like this:
+
+[source, xml]
+....
+<iajc {attributes..} />
+ <{name}>
+ <pathelement path="{first-location}"/>
+ <pathelement path="{second-location}"/>
+ ...
+ <{name}>
+ ...
+</iajc>
+....
+
+As with other Path-like structures, they may be defined elsewhere and
+specified using the refid attribute:
+
+[source, xml]
+....
+<path id="aspect.path">
+ <pathelement path="${home}/lib/persist.jar"/>
+ <pathelement path="${home}/lib/trace.jar"/>
+</path>
+...
+<iajc {attributes..} />
+ <aspectpath refid="aspect.path"/>
+ ...
+</iajc>
+....
+
+The task also supports an attribute `{name}ref` for each such parameter.
+E.g., for `aspectpath`:
+
+[source, xml]
+....
+<iajc {attributes..} aspectpathref="aspect.path"/>
+....
+
+[[antTasks-iajc-sample]]
+==== Sample of iajc task
+
+A minimal build script defines the task and runs it, specifying the
+sources:
+
+[source, xml]
+....
+<project name="simple-example" default="compile" >
+ <taskdef
+ resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties">
+ <classpath>
+ <pathelement location="${home.dir}/tools/aspectj/lib/aspectjtools.jar"/>
+ </classpath>
+ </taskdef>
+
+ <target name="compile" >
+ <iajc sourceroots="${home.dir}/ec/project/src"
+ classpath="${home.dir}/tools/aspectj/lib/aspectjrt.jar"/>
+ </target>
+</project>
+....
+
+Below is script with most everything in it. The compile process...
+
+[arabic]
+. Runs in incremental mode, recompiling when the user hits return;
+. Reads all the source files from two directories;
+. Reads binary .class files from input jar and directory;
+. Uses a binary aspect library for persistence;
+. Outputs to an application jar; and
+. Copies resources from the source directories and binary input jar and
+directories to the application jar.
+
+When this target is built, the compiler will build once and then wait
+for input from the user. Messages are printed as usual. When the user
+has quit, then this runs the application.
+
+[source, xml]
+....
+<target name="build-test" >
+ <iajc outjar="${home.dir}/output/application.jar"
+ sourceRootCopyFilter="**/CVS/*,**/*.java"
+ inpathDirCopyFilter="**/CVS/*,**/*.java,**/*.class"
+ incremental="true" >
+ <sourceroots>
+ <pathelement location="${home.dir}/ec/project/src"/>
+ <pathelement location="${home.dir}/ec/project/testsrc"/>
+ </sourceroots>
+ <inpath>
+ <pathelement location="${home.dir}/build/module.jar"/>
+ <pathelement location="${home.dir}/build/binary-input"/>
+ </inpath>
+ <aspectpath>
+ <pathelement location="${home.dir}/ec/int/persist.jar"/>
+ </aspectpath>
+ <classpath>
+ <pathelement location="${home.dir}/tools/aspectj/lib/aspectjrt.jar"/>
+ </classpath>
+ </iajc>
+
+ <java classname="org.smart.app.Main">
+ <classpath>
+ <pathelement location="${home.dir}/tools/aspectj/lib/aspectjrt.jar"/>
+ <pathelement location="${home.dir}/ec/int/persist.jar"/>
+ <pathelement location="${home.dir}/output/application.jar"/>
+ </classpath>
+ </java>
+</target>
+....
+
+For an example of a build script, see ../examples/build.xml.
+
+[[antTasks-iajc-uptodate]]
+==== Avoiding clean compiles
+
+Unlike javac, the ajc compiler always processes all input because new
+aspects can apply to updated classes and vice-versa. However, in the
+case where no files have been updated, there is no reason to recompile
+sources. One way to implement that is with an explicit dependency check
+using the uptodate task:
+
+[source, xml]
+....
+<target name="check.aspects.jar">
+ <uptodate property="build.unnecessary"
+ targetfile="${aspects.module-jar}" >
+ <srcfiles dir="${src1}" includes="**/*.aj"/>
+ <srcfiles dir="${src2}/" includes="**/*.aj"/>
+ </uptodate>
+</target>
+
+<target name="compile.aspects" depends="prepare,check.aspects.jar"
+ unless="build.unnecessary">
+ <iajc ...
+....
+
+When using this technique, be careful to verify that binary input jars
+are themselves up-to-date after they would have been modified by any
+build commands.
+
+==== Programmatically handling compiler messages
+
+Users may specify a message holder to which the compiler will pass all
+messages as they are generated. This will override all of the normal
+message printing, but does not prevent the task from failing if
+exceptions were thrown or if failonerror is true and the compiler
+detected errors in the sources.
+
+Handling messages programmatically could be useful when using the
+compiler to verify code. If aspects consist of declare [error|warning],
+then the compiler can act to detect invariants in the code being
+processed. For code to compare expected and actual messages, see the
+AspectJ testing module (which is not included in the binary
+distribution).
+
+[[antTasks-adapter]]
+=== Ajc11CompilerAdapter (javac)
+
+This CompilerAdapter can be used in javac task calls by setting the
+`build.compiler` property. This enables users to to easily switch
+between the Javac and AspectJ compilers. However, because there are
+differences in source file handling between the Javac task and the ajc
+compiler, not all Javac task invocations can be turned over to iajc.
+However, ajc can compile anything that Javac can, so it should be
+possible for any given compile job to restate the Javac task in a way
+that can be handled by iajc/ajc.
+
+[[antTasks-adapter-sample]]
+==== Sample of compiler adapter
+
+To build using the adapter, put the `aspectjtools.jar` on the system/ant
+classpath (e.g., in `${ANT_HOME}/lib`) and define the `build.compiler`
+property as the fully-qualified name of the class,
+`org.aspectj.tools.ant.taskdefs.Ajc11CompilerAdapter`.
+
+The AspectJ compiler should run for any compile using the Javac task
+(for options, see the Ant documentation for the Javac task). For
+example, the call below passes all out-of-date source files in the
+`src/org/aspectj` subdirectories to the `ajc` command along with the
+destination directory:
+
+[source, text]
+....
+-- command:
+
+ cp aspectj1.1/lib/aspectjtools.jar ant/lib
+ ant/bin/ant -Dbuild.compiler=org.aspectj.tools.ant.taskdefs.Ajc11CompilerAdapter ...
+
+-- task invocation in the build script:
+
+ <javac srcdir="src" includes="org/aspectj/**/*.java" destdir="dest" />
+....
+
+To pass ajc-specific arguments, use a compilerarg entry.
+
+[source, text]
+....
+-- command
+
+ Ant -Dbuild.compiler=org.aspectj.tools.ant.taskdefs.Ajc11CompilerAdapter
+
+-- build script
+
+ <property name="ajc"
+ value="org.aspectj.tools.ant.taskdefs.Ajc11CompilerAdapter"/>
+
+ <javac srcdir="src" includes="org/aspectj/**/*.java" destdir="dest" >
+ <compilerarg compiler="${ajc}" line="-argfile src/args.lst"/>
+ <javac/>
+....
+
+The Javac task does special handling of source files that can interfere
+with ajc. It removes any files that are not out-of-date with respect to
+the corresponding .class files. But ajc requires all source files, since
+an aspect may affect a source file that is not out of date. (For a
+solution to this, see the `build.compiler.clean` property described
+below.) Conversely, developers sometimes specify a source directory to
+javac, and let it search for files for types it cannot find. AspectJ
+will not do this kind of searching under the source directory (since the
+programmer needs to control which sources are affected). (Don't confuse
+the source directory used by Javac with the source root used by ajc; if
+you specify a source root to ajc, it will compile any source file under
+that source root (without exception or filtering).) To replace source
+dir searching in Javac, use an Ant filter to specify the source files.
+
+[[antTasks-adapter-options]]
+==== Compiler adapter compilerarg options
+
+The adapter supports any ajc command-line option passed using
+compilerarg, as well as the following options available only in AjcTask.
+Find more details on the following options in
+xref:#antTasks-iajc[AjcTask (iajc)].
+
+* `-Xmaxmem`: set maximum memory for forking (also settable in javac).
+* `-Xlistfileargs`: list file arguments (also settable in javac).
+* `-Xfailonerror`: throw BuildException on compiler error (also settable
+in javac).
+* `-Xmessageholderclass`: specify fully-qualified name of class to use
+as the message holder.
+* `-Xcopyinjars`: copy resources from any input jars to output (default
+behavior since 1.1.1)
+* `-Xsourcerootcopyfilter {filter}`: copy resources from source
+directories to output (minus files specified in filter)
+* `-Xtagfile {file}`: use file to control incremental compilation
+* `-Xsrcdir {dir}`: add to list of ajc source roots (all source files
+will be included).
+
+Special considerations when using Javac and compilerarg:
+
+* The names above may differ slightly from what you might expect from
+AjcTask; use these forms when specifying compilerarg.
+
+* By default the adapter will mimic the Javac task's copying of resource
+files by specifying `"**/CVS/*,**/*.java,**/*.aj"` for the sourceroot
+copy filter. To change this behavior, supply your own value (e.g.,
+`"**/*"` to copy nothing).
+
+* Warning - define the system property `build.compiler.clean` to compile
+all files, when available. Javac prunes the source file list of
+"up-to-date" source files based on the timestamps of corresponding
+.class files, and will not compile if no sources are out of date. This
+is wrong for ajc which requires all the files for each compile and which
+may refer indirectly to sources using argument files.
++
+To work around this, set the global property `build.compiler.clean`.
+This tells the compiler adapter to delete all .class files in the
+destination directory and re-execute the javac task so javac can
+recalculate the list of source files. e.g.,
++
+[source, text]
+....
+Ant -Dbuild.compiler=org.aspectj.tools.ant.taskdefs.Ajc11CompilerAdapter
+ -Dbuild.compiler.clean=anything ...
+....
++
+Caveats to consider when using this global `build.compiler.clean`
+property:
+[arabic]
+. If javac believes there are no out-of-date source files, then the
+adapter is never called and cannot clean up, and the "compile" will
+appear to complete successfully though it did nothing.
+. Cleaning will makes stepwise build processes fail if they depend on
+the results of the prior compilation being in the same directory, since
+cleaning deletes all .class files.
+. This clean process only permits one compile process at a time for each
+destination directory because it tracks recursion by writing a tag file
+to the destination directory.
+. When running incrementally, the clean happens only before the initial
+compile.
+
+[[antTasks-ajc]]
+=== Ajc10 (ajc)
+
+This task handles the same arguments as those used by the AspectJ 1.0
+task. This should permit those with existing build scripts using the Ajc
+Ant task to continue using the same scripts when compiling with 1.1.
+This will list any use of options no longer supported in 1.1 (e.g.,
+`lenient, strict, workingdir, preprocess, usejavac`,...), and does not
+provide access to the new features of AspectJ 1.1. (Developers using
+AspectJ 1.1 only should upgrade their scripts to use AjcTask instead.
+This will not work for AspectJ 1.2 or later.)
+
+[[antTasks-ajc-options]]
+==== Ajc10 (ajc) Options
+
+Most attributes and nested elements are optional. The compiler requires
+that the same version of `aspectjrt.jar` be specified on the classpath,
+and that some sources be be specified (using one or more of `argfiles`
+and `srcdir` (with patterns)).
+
+Boolean parameters default to `false` unless otherwise stated.
+
+.AjcTask (ajc) options for specifying sources
+[cols=",",options="header",]
+|===
+|Attribute |Description
+|srcdir |The base directory of the java files. See
+
+|destdir |The target directory for the output .class files
+
+|includes |Comma-separated list of patterns of files that must be
+included. No files are included when omitted.
+
+|includesfile |The path to a file containing include patterns.
+
+|excludes |Comma-separated list of patterns of files that must be
+excluded. No files (except default excludes) are excluded when omitted.
+
+|excludesfile |The path to a file containing exclude patterns.
+
+|defaultexcludes |If true, then default excludes are used. Default
+excludes are used when omitted (i.e., defaults to `true`).
+
+|classpath, classpathref |The classpath to use, optionally given as a
+reference to a classpath Path element defined elsewhere.
+
+|bootclasspath, bootclasspathref |The bootclasspath to use, optionally
+given as a reference to a bootclasspath Path element defined elsewhere.
+
+|extdirs |Paths to directories containting installed extensions.
+
+|debug |If true, emit debug info in the .class files.
+
+|deprecation |If true, emit messages about use of deprecated API.
+
+|verbose |Emit compiler status messages during the compile.
+
+|version |Emit version information and quit.
+
+|failonerror |If true, throw BuildException to halt build if there are
+any compiler errors. If false, continue notwithstanding compile errors.
+Defaults to `true`.
+
+|source |Value of -source option - ignored unless `1.4`.
+|===
+
+.Parameters ignored by the old ajc taskdef, but now supported or buggy
+[cols=",,",options="header",]
+|===
+|Attribute |Description |Supported?
+|encoding |Default encoding of source files. |yes
+
+|optimize |Whether source should be compiled with optimization. |yes?
+
+|target |Generate class files for specific VM version, one of
+[`1.1 1.2`]. |yes
+
+|depend |Enables dependency-tracking. |no
+
+|includeAntRuntime |Whether to include the Ant run-time libraries. |no
+
+|includeJavaRuntime |Whether to include the run-time libraries from the
+executing VM. |no
+
+|threads |Multi-threaded compilation |no
+|===
+
+The following table shows that many of the unique parameters in AspectJ
+1.0 are no longer supported.
+
+.Parameters unique to ajc
+[cols=",",options="header",]
+|===
+|Attribute |Description
+|X |deprecated X options include reweavable (on by default)
+reweavable:compress (compressed by default)
+
+|emacssym |Generate symbols for Emacs IDE support.
+
+|argfiles |A comma-delimited list of argfiles that contain a
+line-delimited list of source file paths (absolute or relative to the
+argfile).
+|===
+
+===== argfiles - argument list files
+
+An argument file is a file (usually `{file}.lst`) containing a list of
+source file paths (absolute or relative to the argfile). You can use it
+to specify all source files to be compiled, which ajc requires to avoid
+searching every possible source file in the source path when building
+aspects. If you specify an argfile to the ajc task, it will not include
+all files in any specified source directory (which is the default
+behavior for the Javac task when no includes are specified). Conversely,
+if you specify excludes, they will be removed from the list of files
+compiled even if they were specified in an argument file.
+
+The compiler also accepts arguments that are not source files, but the
+IDE support for such files varies, and Javac does not support them. Be
+sure to include exactly one argument on each line.
+
+[[antTasks-ajc-nested]]
+==== Ajc10 parameters specified as nested elements
+
+This task forms an implicit FileSet and supports all attributes of
+`fileset` (dir becomes srcdir) as well as the nested `include`,
+`exclude`, and `patternset` elements. These can be used to specify
+source files.
+
+``ajc``'s `srcdir`, `classpath`, `bootclasspath`, `extdirs`, and `jvmarg`
+attributes are path-like structures and can also be set via nested
+`src`, `classpath`, `bootclasspath`, `extdirs`, and `jvmargs`
+elements, respectively.
+
+[[antTasks-ajc-sample]]
+==== Sample of ajc task
+
+Following is a declaration for the ajc task and a sample invocation that
+uses the ajc compiler to compile the files listed in `default.lst` into
+the dest dir:
+
+[source, xml]
+....
+<project name="example" default="compile" >
+ <taskdef name="ajc"
+ classname="org.aspectj.tools.ant.taskdefs.Ajc10" >
+ <!-- declare classes needed to run the tasks and tools -->
+ <classpath>
+ <pathelement location="${home.dir}/tools/aspectj/lib/aspectjtools.jar"/>
+ </classpath>
+ </taskdef>
+
+ <target name="compile" >
+ <mkdir dir="dest" />
+ <ajc destdir="dest" argfiles="default.lst" >
+ <!-- declare classes needed to compile the target files -->
+ <classpath>
+ <pathelement location="${home.dir}/tools/aspectj/lib/aspectjrt.jar"/>
+ </classpath>
+ </ajc>
+ </target>
+</project>
+....
+
+This build script snippet
+
+[source, xml]
+....
+<ajc srcdir="${src}"
+ destdir="${build}"
+ argfiles="demo.lst"
+/>
+....
+
+compiles all .java files specified in the demo.lst and stores the .class
+files in the $\{build} directory. Unlike the Javac task, the includes
+attribute is empty by default, so only those files specified in demo.lst
+are included.
+
+This next example
+
+[source, xml]
+....
+<ajc srcdir="${src}"
+ destdir="${build}"
+ includes="spacewar/*,coordination/*"
+ excludes="spacewar/Debug.java"
+/>
+....
+
+compiles .java files under the `${src}` directory in the spacewar and
+coordination packages, and stores the .class files in the `${build}`
+directory. All source files under spacewar/ and coordination/ are used,
+except Debug.java.
+
+See ../examples/build.xml for an example build script.
+
+[[antTasks-problems]]
+=== Isolating problems running the Ant tasks
+
+If you have problems with the tasks not solved by the documentation,
+please try to see if you have the same problems when running ajc
+directly on the command line.
+
+* If the problem occurs on the command line also, then the problem is
+not in the task. (It may be in the tools; please send bug reports.)
+* If the problem does not occur on the command line, then it may lie in
+the parameters you are supplying in Ant or in the task's handling of
+them.
+* If the build script looks correct and the problem only occurs when
+building from Ant, then please send a report (including your build file,
+if possible).
+
+[[antTasks-knownProblems]]
+==== Known issues with the Ant tasks
+
+For the most up-to-date information on known problems, see the
+https://bugs.eclipse.org/bugs[bug database] for unresolved
+https://bugs.eclipse.org/bugs/buglist.cgi?&product=AspectJ&component=Compiler&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED[compiler
+bugs] or
+https://bugs.eclipse.org/bugs/buglist.cgi?&product=AspectJ&component=Ant&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED[taskdef
+bugs] .
+
+When running Ant build scripts under Eclipse 2.x variants, you will get
+a VerifyError because the Eclipse Ant support fails to isolate the Ant
+runtime properly. To run in this context, set up iajc to fork (and use
+forkclasspath). Eclipse 3.0 will fork Ant processes to avoid problems
+like this.
+
+Memory and forking: Users email most often about the ajc task running
+out of memory. This is not a problem with the task; some compiles take a
+lot of memory, often more than similar compiles using javac.
+
+Forking is now supported in both the
+xref:#antTasks-adapter[Ajc11CompilerAdapter (javac)] and
+xref:#antTasks-iajc[AjcTask (iajc)], and you can set the maximum memory
+available. You can also not fork and increase the memory available to
+Ant (see the Ant documentation, searching for ANT_OPTS, the variable
+they use in their scripts to pass VM options, e.g., ANT_OPTS=-Xmx128m).
+
+[[antTasks-feedback]]
+==== Ant task questions and bugs
+
+For questions, you can send email to aspectj-users@dev.eclipse.org. (Do
+join the list to participate!) We also welcome any bug reports, patches,
+and features; you can submit them to the bug database at
+https://bugs.eclipse.org/bugs using the AspectJ product and Ant
+component.