There* is* a problem with using a build.properties at the root level and
having all of the build.xml's reference it. The problem is that some of the
properties piggyback off of ${user.dir} which is different when running ant
in different subdirs. E.g. I have a property:
  natives.dir=${user.dir}/natives
where my native source code is. Works for the root-level build.xml, but not
the one in the natives subdir.

And the downside to forcing all ant calls to go through the root build.xml
is that it forces that build.xml to contain *every* target in every subdir
build.xml, which makes it really big and also is a pain when I want to add a
quick target to a subdir build.xml.

I'm kind of stumped here for a good solution, but I really appreciate all
the feedback ... so far.

Thnaks.
John

-----Original Message-----
From: Christian Holmqvist, IT, Posten
[mailto:[EMAIL PROTECTED]]
Sent: Tuesday, March 19, 2002 3:03 AM
To: 'Ant Users List'
Subject: SV: Ant design question(s) - #1


Hi!

> Best to explain by example. I have a root directory, 
> underneath which are
> two subdirs, one for java and one for native code. I have 3 separate
> build.xml files, one in each directory. The way I have 
> written it now, the
> root-level build.xml sets some environment variables that the subdir
> build.xml's use (e.g. destination directory). I figure this 
> is good because
> these are defined in only one place. But it's bad because the two
> build.xml's in the subdirectories are not standalone - they 
> have to be run
> through the main build.xml else there are undefined variables. 
>   So the question is, is there a smarter way to do this?

As many others have sade before, it is nice to use a build.propertie file to
define common properties. 
BUT there is a bit of catch 22 in this, some form of define has to be done
to find the propertie file. This is why I choose the same solution as you
did.

I made a init task in the sub_build.xml file that ensures that the $ROOT
property is set (else it will fail) and since all targets depends (in one
way or another) on the init target I can know that the sub_build.xml is
called throw the build.xml file.
There are several advantages in this, in the build.xml file I can check that
dependent project is uptodate ahead of building another project. I can also
ensure that the correct .jar files are lokated in the /lib directory for the
version of the build that I'm performing. 

I have also created a "user_view_build.xml" file that opens up just those
targets that I want my users to be able to perform (for example developers
and config manager don't have the same "user_view_build.xml" file). 

This might seem kind of complex but I use very little none built in taskes,
the build.xml files are very small and clean.

The main thing to remember is that it is VERY different to develop ant for a
small tight group where all are "ant aware" and to develop ant for a large
none ant-aware group.

Ohh well, hop you have a nice anty time *smile*

Cheers Christian Holmqvist

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to