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.)
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.
Table 4.1. AjcTask (ajc) options for specifying sources
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. |
Table 4.2. Parameters ignored by the old ajc taskdef, but now supported or buggy
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.
Table 4.3. Parameters unique to ajc
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). |
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.
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.
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:
<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
<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
<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.