Right now there exists a workaround to the problem of property scope.  Using the 
Antcall task, you can override a property set in a "master" file, and pass that 
property on to a sub-build file.  I used that to pass a ${project.dir} variable that 
described the relative location of the subproject (ie, com/gfs/common/project) - as 
the variable gets passed down from a master build file to a child build file, the 
master build file appends the child build file's directory onto the path.

For example:
c:\dev\src\ant -Dproject.dir = com/gfs/common

<ant dir="subproject" target="build">
  <property name="project.dir" value="${project.dir}/subproject"/>
</ant>

This can be used to modify a path as it gets passed down a build hierarchy.  The 
antcall task can also be used to do the same thing with other targets in the same 
build file.

Kyle

>>> [EMAIL PROTECTED] 07/05/01 06:17PM >>>
* Have one master file to build all other projects (trivial).
* Have a master set of properties and rules that can be shared by all the
build files. These need to be *PARAMETERIZED*.
* For single-valued properties: be able to define a default value in a
master file, and possibly override or undefine it in sub-builds.
* For path or list-valued properties: be able to define a default value, and
either override, or append or prepend to it in sub-builds. Typical examples
are classpaths, etc.

The desired end-result is to wrap all the complexity of the build mechanism
into one or more master buildfiles, so that invididual projects that are
built in essentially the same way can just have a small buildfile that just
defines or overrides a few things, and defers the rest of the compexity to
the master file.

(In the Make model I used, the end-project Makefiles were usually just a
couple of defines of mandatory things like the path to the source root, the
project and target names, and the list of sources, and everything else was
computed on the fly and/or reasonably defaulted from this information. Ant
should really be making it even easier, since it does much of this sort of
thing itself anyway...)

For instance, with Ant, I might define a default classpath (for common
libraries) in the master file, but individual build.xml's may wish to
prepend to that classpath for additional projects that they may need in the
classpath.

Or I might wish to add a few files to the fileset used for the default jar
rule. I.e. in addition to ${build}/**/*.class, I might wish to add an
explicit manifest file, or images, or whatever, on a per-buildfile basis.

I've been working over the documentation for a couple of days now, and can't
see convenient ways to do any of this.

Am I missing something here?
--
Shankar Unni.

Reply via email to