Hello, In my latest project we use both MAKE and ANT. We found that ANT can more reliable compile java classes, create archives and even faster then OS delete files (especially if there is antivirus active and the files on a dynamic ClearCase view). However there is one feature of MAKE that can leave ANT only for small task execution – it is very simple to make MAKE work well with development build. Let me explain – people, especially during development, usually do not build their project from scratch – they change something, compile, then change something else, then compile again, and, usually, to make the build system more reliable, the build makes more than it is required. Lets look, for example, at “installation image” target. The target usually includes wiping the whole image directory (because we do not want to install obsolete files) and then recreating it. But it should be executed only if one of “compile” targets were executed and something was actually “compiled” and not just in the current build, but in any build made after the previous image was created! Unfortunately it is very difficult to do it in ANT. In MAKE it can be done easily by converting all PHONY targets into real ones, specifying their real dependencies (not just other ex-PHONY targets) and adding “touch” at the end. No double maintenance, no hassle. In ANT all targets are “PHONY”. Tasks deal with dependencies themselves, but they do not report if anything was changed.
That means we have to use double target sets - recursive and non recursive like: <target name="install-image-only"/> <target name="install-image" depends="classes,jars,javadocs,install-image-only"/> but this is a bad idea, because "theoretically" ANT does not guarantee that classes target will be executed before install-image-only (and there will be a problem in parallel ANT). The only way to fix it is to use <ant> or <antcall>, but they do not check what targets were executed already. Too much trouble... So, why not to create a set of special properties like ${build.timestamps.install-image} (to indicate when at least one file was modified during the target execution), make them automatically persistent and add special attributes to targets like: <target name="install-image" depends="..." if-updated="classes,jars,javadoc"/> or <target name="install-image" depends="..." if-dependencies-updated="!ALL!"/> Sincerely, Alexey Solofnenko. -- { http://trelony.cjb.net/ } Alexey N. Solofnenko { http://www.inventigo.com/ } Inventigo LLC Pleasant Hill, CA (GMT-8 usually) -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>