export CVS_ROOT=":pserver:anonymous@dev.eclipse.org:/home/technology" cvs co org.aspectj/modulesIf using Eclipse, check out the subdirectories of
org.aspectj/modules
as Eclipse projects.
Skip modules aspectj-attic
and (unless running
JUnit or compiler tests) tests
and most testing*
modules. Do not skip testing-utils
,
which is used by other modules.
Build an AspectJ distribution:
cd org.aspectj/modules/build ../lib/ant/bin/ant -f build.xmlTo speed the build, Eclipse users can adopt the Eclipse-produced .class files:
../lib/ant/bin/ant -f build.xml -Dbuild.config=useEclipseCompilesInstall the distribution (e.g., into build/../aspectj-install):
java -jar ../aj-build/dist/aspectj-DEVELOPMENT.jarYou can skip the GUI by specifying an existing, empty writable target directory using
-to {targDir}
:
java -jar ../aj-build/dist/aspectj-DEVELOPMENT.jar -to .Test it by running the build script in the examples directory:
cd ../aspectj-install/doc/examples ../../ant/bin/antThis should build and run the spacewar example.
export CVS_ROOT=":pserver:anonymous@dev.eclipse.org:/home/technology" cvs co org.aspectj/modulesEclipse users should check out subdirectories of
org.aspectj/modules
as a Java project.
Not all modules are required.
The aspectj-attic
module only has old code,
and the tests
and testing-*
modules
are only needed to run tests. Also modules with Java 5 source
in {module}/java5-src
require Java 5 to build
for the release; the Java 5 source files are ignored when building
under 1.4 or earlier VM's.
build.xml
which support building only that
module.
(To run Ant, use the project's ../lib/ant
scripts and libraries, not your own. Currently the build uses
a standard Ant release, but we might modify our version of the
Ant distribution.)
The default target for the master build.xml
creates an AspectJ distribution in
../aj-build/dist/aspectj-DEVELOPMENT.jar
;
see the build.xml for other targets.
The build.xml
's in the other modules support the
targets compile
and test
for just
that module; if you do clean
, all binaries for all
modules are cleaned.
When using the master build.xml
,
consider defining the following flag properties:
Property | Meaning |
---|---|
module.name | To build any module (esp. those not directly supported by a target), use the "any-module" target and define the module name. |
check.build.jar | any value cause build to fail if
lib/build/build.jar is out of date. (This is a
built archive of the build module to avoid bootstrapping.)
|
build.config | override default configuration in build.xml. Significant values include "verbose" for more output and "useEclipseCompiles" to assume that Eclipse has compiled modules into their bin directories, and just assemble those classes. |
For example, to build everything into a release bundle, with verbose logging:
cd modules/build ../lib/ant/bin/ant
To build only the asm module (and any modules it requires) using
modules/build
:
cd modules/build ../lib/ant/bin/ant -f build.xml any-module -Dmodule.name=asm
To build and test the asm module from that module:
cd modules/asm ../lib/ant/bin/ant test
To build the test harness into
../aj-build/jars/testing-drivers-all.jar
:
cd modules/build ../lib/ant/bin/ant -f build.xml build-testing-drivers
As mentioned above, the modules are Eclipse projects, so once checked out, they should build as-is. That will enable you to run the compiler or test harness from within Eclipse (see below), but it will not build the AspectJ release as Ant does. If you are making changes in Eclipse, you should set your default JRE to the minimum supported by the AspectJ tools (currently JDK 1.3) to avoid using later API's. You'll need to set some variables in your Eclipse environment; currently these are:
JAVA_HOME/lib/tools.jar
../lib/build/build.jar
, which is
added via a taskdef declaration.)
If you find on rebuilding that the build products are not
being regenerated, you may need to manually delete them
or restart eclipse (the files are not being closed); see
readme-build-module.html
for more information.
useEclipseCompiles
in the
build.config
variable as described above. That reduces the build process
to product assembly, which can be completed in a couple minutes.
(And of course you can run Ant from Eclipse as described above.)
java -jar {file} {arguments}
.
To run the compiler from the command-line, use the ajbrowser
jar file:
java -jar aj-build/jars/ajbrowser-all.jar {compile arguments}This will run
ajbrowser
if you provide no arguments or
only (unflagged) .lst file arguments. To run the test harness,
use the testing-drivers
jar file:
java -jar aj-build/jars/testing-drivers-all.jar tests/ajcTests.xml ...
Program | Module | Main |
---|---|---|
AspectJ compiler | org.aspectj.ajdt.core | org.aspectj.tools.ajc.Main |
AspectJ browser | ajbrowser | org.aspectj.tools.ajbrowser.Main |
Test harness | testing-drivers | org.aspectj.testing.drivers.Harness |
Each module has a tree of JUnit tests in the testsrc
directory.
These parallel the src
directories and contain roll-up suites
for each package
({module}/testsrc/{packagePath}/{package}Tests.java
) and
for the module as a whole
({module}/testsrc/{module}ModuleTests.java
).
The AspectJ project also has additional custom tests in the tests module, mainly the compiler tests run by the harness in ajcTests.xml. It is important to run these additional compiler tests (not covered by the JUnit suite) before and after any change to the compiler.
The module run-all-junit-tests refers to all the other modules and the compiler tests adapted through the ../tests/src. So the easiest way to run the JUnit and compiler tests is to run the top-level suite RunTheseBeforeYouCommitTests.
As you might expect, you can run JUnit directly if you put the built modules on the JUnit classpath. You can build in Eclipse or using Ant. The master build script enables you to build an assembled jar for a module which includes all the normal and testing classes and any antecedants (except for those "skipped" - see readme-build-module.html).
As shown above, you can use the module build script:
cd modules/util ../lib/ant/bin/ant test
The build-testing-drivers
target builds a single jar with
the AspectJ binaries and a test harness as the main class.
It reads test suite files like
../tests/ajcTests.xml;
use the -help flag to see available options.
For more information, see
../tests/readme-tests-module.html.
org.aspectj.bridge.Version
.
Do not run using the build.config
value
useEclipseCompiles
,
because this will include testing classes in the release libraries.
See Version synchronization below
for more details on how the version is updated.
tests/ajcTestsFailing.xml
are fixed and moved to
tests/ajcTests.xml
.
Before a release, run the release tests as described in
../tests/readme-release-tests.html
(deprecated? using:
../build/release-checklist.txt).
cd org.aspectj/ cvs tag -R -c v1_1_0Pushing the release out to the web involves manually updating
aspectj-home/
with the release files
(and documentation, if it is not a preview release),
verifying the downloads and pages,
and sending any release notifications.
Save the release installer, test results, and any notes
about deferred bugs or tests in
org.aspectj/releases/aspectj-{version}/
.
As described more fully in readme-build-module.html, the build system introspects on module and the .classpath file to determine how to build. Further, it enforces stricter build invariants than the Eclipse projects do; when your code works in Eclipse but fails in the Ant, it's your responsibility to fix it by following the build invariants below.
How the build system introspects, and the build invariants that are enforced by the Ant build:
{module.name}/.classpath
is read to determine
the source directories and required projects and libraries.
src
and testsrc
directories.
java5-src
and java5-testsrc
directories.
testsrc
directory is used in production builds.
{module.name}.jar
includes only the module classes, and {module.name}-all.jar
includes the module classes plus any antecendant modules and any
required libraries not skipped (see below).
{module.name}/{module.name}.mf.txt
, if available,
will be used as the jar file manifest, after replacing certain
variables in the .mf.txt
file.
resource.pattern
in
Builder.properties
are included with assembled jars.
testing-*
module is used in production builds,
directly or indirectly.
testsrc
code,
whether in the same or another module.
That means there are a number of legal Eclipse projects and code arrangements which are not valid AspectJ modules. When you add modules, libraries, or dependencies, you must build with Ant to verify these invariants are not broken.
javac
,
put the JDK bin directory on your PATH and/or define
the JAVA_HOME environment variable.
Ant requires the path to the javac
executable
when the BuildModule
taskdef runs. I think it either
gets it from $JAVA_HOME
or if the bin
directory is on the PATH
.