This is information that will hopefully clarify and give some insight
into how depends works in NAnt.
There is are a few posts out there on the net that talk about the
difference between <call target> and <target depends>. What I find
that is missing are some subtle nuances when it comes to when to use
depends and when it actually has the effect you desire.
To review.
<call target> will always exercise the Target.
<target depends> will only call the targets listed in the depends if it
has not already been called.
The <target depends> statement is a little misleading though. The more
accurate description is: will only call the taget(s) listed if the
calling target has not already called it through its depends.
The below example has two starting targets. call.me and let.me. These
two are designed to call two targets and those two targets each need to
have some global target to be run only once. it is to set properties
that they both use. (code reduction). The difference is call.me first
calls the child targets where the let.me uses depends to call the child
targets. Each child target spec1 and spec2 use depends to call the
global target.
<project>
<target name="call.me">
<echo message="call.me" />
<call target="spec1" />
<call target="spec2" />
</target>
<target name="let.me" depends="spec1, spec2">
<echo message="let.me" />
</target>
<target name="global">
<echo message="global" />
</target>
<target name="spec1" depends="global">
<echo message="spec1" />
</target>
<target name="spec2" depends="global">
<echo message="spec2" />
</target>
</project>
When I exercise call.me I got the following output. You will notice
that global was called twice even though I had depends listed for both
children. This did not do what I wanted.
C:\temp\NAnt>nant -buildfile:test-depends.build call.me
NAnt 0.90 (Build 0.90.3780.0; release; 5/8/2010)
Copyright (C) 2001-2010 Gerry Shaw
http://nant.sourceforge.net
Buildfile: file:///C:/temp/NAnt/test-depends.build
Target framework: Microsoft .NET Framework 3.5
Target(s) specified: call.me
call.me:
[echo] call.me
global:
[echo] global
spec1:
[echo] spec1
global:
[echo] global
spec2:
[echo] spec2
BUILD SUCCEEDED
Total time: 1.4 seconds.
When I call let.me I get the blow output. I only get global called
once. It is also the very first thing to be called even prior to the
let.me target.
let.me depends on spec1
spec1 depends on global
global does not depend on anything so it is exercised.
The call returns to spec 1
no more depends so it is exercised
the call returns to let.me
it still depends on spec2
spec2 checks to see if global has been called and it has already and
then this restriction is fulfilled
spec2 is exercised
the call returns to let.me
no more depends
let.me is exercised.
C:\temp\NAnt>nant -buildfile:test-depends.build let.me
NAnt 0.90 (Build 0.90.3780.0; release; 5/8/2010)
Copyright (C) 2001-2010 Gerry Shaw
http://nant.sourceforge.net
Buildfile: file:///C:/temp/NAnt/test-depends.build
Target framework: Microsoft .NET Framework 3.5
Target(s) specified: let.me
global:
[echo] global
spec1:
[echo] spec1
spec2:
[echo] spec2
let.me:
[echo] let.me
BUILD SUCCEEDED
Total time: 1.2 seconds.
Hope you found this helpful.
Scott
Scott Pennington
Senior Software Engineer
Prosper Marketplace, Inc.
111 Sutter Street, 22nd Floor
San Francisco CA 94104
www.prosper.com <http://www.prosper.com/>
CONFIDENTIALITY STATEMENT: This email message, together with all attachments,
is intended only for the individual or entity to which it is addressed and may
contain legally privileged or confidential information. Any dissemination,
distribution or copying of this communication by persons or entities other than
the intended recipient, is strictly prohibited, and may be unlawful. If you
have received this communication in error please contact the sender immediately
and delete the transmitted material and all copies from your system, or if
received in hard copy format, return the material to us via the United States
Postal Service. Thank you.
------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security
threats, fraudulent activity, and more. Splunk takes this data and makes
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2dcopy2
_______________________________________________
NAnt-users mailing list
NAnt-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nant-users