Browse Source

document basic auto-build assumptions and invariants

tags/PRE_ANDY
wisberg 19 years ago
parent
commit
e4367850e5
1 changed files with 109 additions and 2 deletions
  1. 109
    2
      build/readme-build-and-test-aspectj.html

+ 109
- 2
build/readme-build-and-test-aspectj.html View File

@@ -48,6 +48,7 @@ debug failed builds, see
<li>Release completion</li>
</ol>
</li>
<li>New modules, Java 5, and Ant-only build problems</li>
<li>Build Problems</li>
</ol>

@@ -101,13 +102,17 @@ that usually means checking out the modules directory:
Eclipse users should check out subdirectories of
<code>org.aspectj/modules</code> as a Java project.

<p/>Not all modules are required.
<p/>
<p>
Not all modules are required.
The <code>aspectj-attic</code> module only has old code,
and the <code>tests</code> and <code>testing-*</code> modules
are only needed to run tests. Also modules with Java 5 source
in <code>{module}/java5-src</code> require Java 5 to build
for the release; the Java 5 source files are ignored when building
under 1.4 or earlier VM's.
</p>

<h3>Standard builds</h3>
<h4>Building using Ant</h4>
@@ -142,6 +147,11 @@ Consider defining the following flag properties:
</td></tr>
</table>

<p/>
<p>
You can also use the build script in each module and the targets
"test" (default) or "compile". ("clean" removes all build products,
not just those for that module.)
<p/>
For example, to build everything into a release bundle,
with verbose logging
@@ -150,12 +160,20 @@ with verbose logging
../lib/ant/bin/ant
</pre>

To build only the asm module (and any modules it requires):
To build only the asm module (and any modules it requires) using
<code>modules/build</code>:
<pre>
cd modules/build
../lib/ant/bin/ant -f build.xml any-module -Dmodule.name=asm
</pre>

To run JUnit tests (output to <code>../aj-build/junit</code>)
for the util module using <code>util/build.xml</code>:
<pre>
cd modules/util
../lib/ant/bin/ant test
</pre>

To build the test harness into
<code>../aj-build/jars/testing-drivers-all.jar</code>:
<pre>
@@ -340,9 +358,98 @@ Pushing the release out to the web involves manually updating
<p/>
<hr/>
<a name="antInvariants"/>
<h3>New modules, Java 5, and Ant-only build problems</h3>
<p>
As described more fully in
<a href="readme-build-module.html">readme-build-module.html</a>,
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.
</p>
<p>
How the build system introspects, and the build invariants that
are enforced by the Ant build:
</p>
<ul>
<li>A given module is identified by its directory name.
</li>
<li>Most modules are Eclipse Java projects; some are AspectJ projects.
Eclipse is not required to build.
</li>
<li>The file <code>{module.name}/.classpath</code> is read to determine
the source directories and required projects and libraries.
</li>
<li>Normal Java source files are in <code>src</code> and <code>testsrc</code>
directories.
</li>
<li>Java 5 source files are in <code>java5-src</code> and <code>java5-testsrc</code>
directories.
</li>
<li>Neither <code>testsrc</code> directory is used in production builds.
</li>
<li>
This only requires what's in the
<a href="../lib">../lib</a> directory and the usual Java VM's.
That means modules can only depend on each other and the libraries
in <a href="../lib">../lib</a>.
</li>
<li>Modules are built into jar files. <code>{module.name}.jar</code>
includes only the module classes, and <code>{module.name}-all.jar</code>
includes the module classes plus any antecendant modules and any
required libraries not skipped (see below).
</li>
<li>A file <code>{module.name}/{module.name}.mf.txt</code>, if available,
will be used as the jar file manifest, after replacing certain
variables in the <code>.mf.txt</code> file.
</li>
<li>All required libraries are included in the production jars, except
for testing libraries and those "skipped" in
<a href="src/org/aspectj/internal/tools/build/Builder.properties">
Builder.properties</a>
(Ant, JUnit, etc.).
</li>
<li>Test classes are excluded from the compile process for production builds.
These result in the same jar files; there is no way to
tell externally whether the test classes were stripped from a jar.
</li>
<li>ONLY resources specified as <code>resource.pattern</code> in
<a href="src/org/aspectj/internal/tools/build/Builder.properties">
Builder.properties</a>
are included with assembled jars.
</li>
<li>No <code>testing-*</code> module is used in production builds,
directly or indirectly.
</li>
<li>It is an error for any code to depend on any <code>testsrc</code> code,
whether in the same or another module.
</li>
<li>AspectJ projects are built in Ant using
<a href="../lib/aspectj">../lib/aspectj</a>.
</li>
<li>Java 5 code is not supported in AspectJ (yet).
</li>
<li>Java 5 code is built in Ant only if JAVA_HOME points to Java 5 (or later).
</li>
<li>No normal code can depend on any Java 5 code.
The build system checks by building everything using the
lowest VM supported by the tools.
</li>
</ul>
<p>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.
</p>
<h3>Build problems</h3>
Some build problems and fixes encountered in the past:
<ul>
<li>If the build works in Eclipse, but fails in Ant,
do not assume the build scripts are broken.
See <a href="#antInvariants">Invariants enforced only in Ant</a>.
</li>
<li>If your compiles fail because Ant cannot find <code>javac</code>,
put the JDK bin directory on your PATH and/or define
the JAVA_HOME environment variable.

Loading…
Cancel
Save