Command-line users use CVS to check out something like this:
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 Java projects.
Skip modules aspectj-attic
and (unless running
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.
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/antTo build only the asm module (and any modules it requires):
cd modules/build ../lib/ant/bin/ant -f build.xml any-module -Dmodule.name=asmTo 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
../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 |
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.
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.
Normally, we do releases only after fixing all high-priority
(P1 and P2) bugs in the bug database
(
All open AspectJ bugs with P1 and P2).
For bug fixes, associated tests in
tests/ajcTestsFailing.xml
are fixed and moved to
tests/ajcTests.xml
.
Before a release, run the following tests using a Java 1.3 VM (the minimum required by the AspectJ tools):
tests/junitModules.xml
(which runs all the
modules/{module}/testsrc/{module}ModuleTests.java
).
tests/ajcTests.xml
and tests/ajcTestsFailing.xml
.
Run these before the final build using the test harness,
as follows:
cd tests/ java -jar {..}/testing-drivers-all.jar ajcTests.xml -releaseThe
-release
option skips tests
marked purejava
or knownLimitation
and only emits one-line results for each test:
PASS one test identifier() FAIL another test identifier() ...(Use
-help
on the harness to see the full
definition of the -release
alias.)
Run with and without the -emacssym
option,
saving the output
to the appropriate subdirectory of the
org.aspectj/releases directory
with the name
ajcTests-result-{version}.txt
or ajcTests-result-{version}-emacssym.txt
.
Compare results with a prior release or test run using TestDiffs:
set CLASSPATH="{..}/testing-drivers-all.jar" java org.aspectj.testing.util.TestDiffs {first-run}.txt {second-run}.txtThis will generate lists of tests fixed, broken, missing, or added. For a release, no tests from
ajcTests.xml
should be broken, and missing tests (those in the first run absent from the
second run) should be justified (usually the test was
removed as invalid). A test will show up as
missing from the first run and added to the second run if
it is renamed between runs.
For a final release, no test should be FAIL
unless it is
deferred (including those from ajcTestsFailing.xml
).
For more information, see the instructions for building and running the test harness and the tests ../tests/readme-tests-module.html.
cd {aspectj-install}/doc/examples {ant 1.5.1} -f build.xmlAlso run 2-3 other targets from Ant and some examples directly:
all
runs all examples, and nonGui
runs those
that do not require manual operation;
tracing-bc
does bytecode weaving;
This quick test verifies that the
aspectjtools.jar
and aspectjrt.jar
are installed and have a matching version, that the examples actually
compile and run, etc.
Some failures with past releases to consider checking:
cd org.aspectj/ cvs tag -R -c v1_1_0
Pushing 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}/
.
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
.