From: <ant...@no...> - 2005-09-16 13:27:02
|
Hi, I've been doing some debugging inside Ant, related to the problem that = makes it practically impossible to use runtarget to call the same target = twice. Basically the problem seems to exist because Ant re-uses all Task = objects. When a target (that has already been executed within the same = project's scope either because of a dependency or runtarget) is executed = using runtarget, the Task objects are not reconfigured. E.g. an Echo = task's output string containing variables will only be expanded the = first time the target containing the task is executed. In Echo's case = this means that a specific Echo-tag in a target can only display the = same string over and over if the target is executed multiple times using = runtarget. Hence the following does _not_ display a, b, but a, a. <target name=3D"firsttarget" /> <var name=3D"myvar" value=3D"a" /> <runtarget target=3D"othertarget" /> <var name=3D"myvar" value=3D"b" /> <runtarget target=3D"othertarget" /> </target> <target name=3D"othertarget"> <echo>${othertarget}</echo> </target> I have not studied the implications to other tasks, but it seems like a = global problem. If, however, in the above example the echo-task is nested in a = Sequential task (or e.g. if-then-block which seems to use Sequential = underneath) it works ok. For some reason the setProxy method of = RuntimeConfigurable gets called for all of Sequential's nested tasks, = causing the proxyConfigured field to be reset and eventually the = underlying Task object to be reconfigured in maybeConfigure-method every = time the Sequential is executed. Did I make any sense? Probably not. Still, based on this, could anybody = please be able to help me on how to make runtarget work properly when = calling a target more than once? To me it doesn't matter whether I have = to patch Ant or Ant-contrib or both. Thanks, Antti Kivim=E4ki |
From: Justin M. <ju...@wi...> - 2005-09-16 15:34:33
|
Shouldn't othertarget be: <target name=3D"othertarget"> <echo>${myvar}</echo> </target> ant...@no... wrote: > Hi, >=20 > I've been doing some debugging inside Ant, related to the problem that = makes it practically impossible to use runtarget to call the same target = twice. >=20 > Basically the problem seems to exist because Ant re-uses all Task objec= ts. When a target (that has already been executed within the same project= 's scope either because of a dependency or runtarget) is executed using r= untarget, the Task objects are not reconfigured. E.g. an Echo task's outp= ut string containing variables will only be expanded the first time the t= arget containing the task is executed. In Echo's case this means that a s= pecific Echo-tag in a target can only display the same string over and ov= er if the target is executed multiple times using runtarget. >=20 > Hence the following does _not_ display a, b, but a, a. >=20 > <target name=3D"firsttarget" /> > <var name=3D"myvar" value=3D"a" /> > <runtarget target=3D"othertarget" /> > <var name=3D"myvar" value=3D"b" /> > <runtarget target=3D"othertarget" /> > </target> >=20 > <target name=3D"othertarget"> > <echo>${othertarget}</echo> > </target> >=20 > I have not studied the implications to other tasks, but it seems like a= global problem. >=20 >=20 > If, however, in the above example the echo-task is nested in a Sequenti= al task (or e.g. if-then-block which seems to use Sequential underneath) = it works ok. For some reason the setProxy method of RuntimeConfigurable g= ets called for all of Sequential's nested tasks, causing the proxyConfigu= red field to be reset and eventually the underlying Task object to be rec= onfigured in maybeConfigure-method every time the Sequential is executed. >=20 >=20 > Did I make any sense? Probably not. Still, based on this, could anybody= please be able to help me on how to make runtarget work properly when ca= lling a target more than once? To me it doesn't matter whether I have to = patch Ant or Ant-contrib or both. >=20 >=20 > Thanks, > Antti Kivim=E4ki |