On Fri, Jul 8, 2011 at 10:49 AM, Dominique Devienne <ddevie...@gmail.com> wrote: > On Fri, Jul 8, 2011 at 10:27 AM, Perrier, Nathan <nperr...@ptc.com> wrote: >> No, because antcall creates a new project underneath the hood, whereas >> runtarget (antcontrib task) does not. > > I would add that <runtarget> (and <antcall> as well in fact) goes > against the Ant philosophy of having declarative builds using targets > with proper dependencies between them, where by "dependencies" I mean > that target just state their "requirements" and should not care when > or in which order those requirements are fulfilled, since that's the > job of the "dependency manager" to analyze the graph of targets and > order them such that each one runs only once and in the proper order, > detecting circular references. Targets are not functions that one > would call at will, leading to procedural as opposed to declarative > builds. <macrodef> usage should eliminate the need for most > <runtarget> usage and is preferred in general. > > In more practical terms, <antcall> does indeed create a new project > (i.e. a new "scope"), which means that any property it sets will not > be visible to the build that used <antcall>. <runtarget> does not > create a new Project, so all properties set *are* visible to the > "caller", and it achieves that via a loophole in Ant's API which is > not plugged for backward-compatibility reasons. > > Using <antcall> and <runtarget> is IMHO a symptom of using Ant and > builds with a wrong (procedural) mindset. I've created lots of large > and complex builds in the past without any, so it's certainly not > necessary to idiomatic Ant usage, although it remains quite popular to > many :) My $0.02. --DD
And since Ant 1.6 I have never found a problem that would formerly have been solved by e.g. <antcall> that couldn't be solved with <macrodef>, and so reducing dependencies on external libraries while still avoiding the overhead of the additional project instance. Matt > >> -----Original Message----- >> From: Steve Amerige [mailto:steve.amer...@sas.com] >> >> Are the two statements below equivalent? >> <antcall target="doit" InheritRefs="true" /> >> <runtarget target="doit" /> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@ant.apache.org > For additional commands, e-mail: user-h...@ant.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@ant.apache.org For additional commands, e-mail: user-h...@ant.apache.org