In addition to searching the source directory for
.java files,
SCons actually runs the .java files
through a stripped-down Java parser that figures out
what classes are defined.
In other words, SCons knows,
without you having to tell it,
what .class files
will be produced by the javac call.
So our one-liner example from the preceding section:
Will not only tell you reliably
that the .class files
in the classes subdirectory
are up-to-date:
% scons -Q
javac -d classes -sourcepath src src/Example1.java src/Example2.java src/Example3.java
% scons -Q classes
scons: `classes' is up to date.
|
But it will also remove all of the generated
.class files,
even for inner classes,
without you having to specify them manually.
For example, if our
Example1.java
and
Example3.java
files both define additional classes,
and the class defined in Example2.java
has an inner class,
running scons -c
will clean up all of those .class files
as well:
% scons -Q
javac -d classes -sourcepath src src/Example1.java src/Example2.java src/Example3.java
% scons -Q -c classes
Removed classes/Example1.class
Removed classes/AdditionalClass1.class
Removed classes/Example2$Inner2.class
Removed classes/Example2.class
Removed classes/Example3.class
Removed classes/AdditionalClass3.class
|