*WHAT IS A REFERENCE? =====================* The easiest way to think of this is a reference is as a pointer to a resource in Ant. An Ant resource merely some sort of Ant object such as a property, a set of files, a path, a fileset, taskdefs, etc. * (Yes, a property is a resource, and could have a reference point to it:
**<!--Property Set --> <property name="my.property" value="Hello World!"/> <!-- Setting a reference to point to the property --> <propertyresource name="my.property" id="resource.id"/> <!-- Setting a new property from your reference --> <property name="ref.property" refid="resource.id"/> <echo message="${ref.property}"/> * * )* References allow you to define them in one place, but use them elsewhere. The most common example is a classpath. It is quite common to define the classpath in one place in Ant, and then use that reference when you actually run the <java>, <junit>, or <javac> tasks. When you define a reference, you use the parameter "id=". When you use the reference, you use the "refid=". *<ANT>, <ANTCALL>, AND <SUBANT> ===============================* For some reason, references and properties are treated differently in these tasks: - *Properties* - By default, are inherited - Will override existing properties if inherited - Inheriting is done via *inheritAll* parameter. - If specified as a nested element, will override existing properties. - *References* - By default are *not* inherited - Will *not* override existing reference definitions if inherited. - Inheriting is done via *inheritRefs* parameter. - If specified as a nested element, will override existing properties. Personally, I set both "inheritAll" and InheritRefs to false and then specify exactly which properties and references I want as nested elements. That way, I know exactly what is being passed and how it will affect the called target.* * On Tue, Jun 2, 2009 at 3:10 PM, Jim Garrison <jim.garri...@troux.com> wrote: > The ANT docs use the term "reference" in a way that, at least to me, is a > little confusing. The term "reference" seems to mean both the act of > referring to an object defined elsewhere (as in "refid=...") and also the > object being referred to. Are the following correct? > > 1. A "Property" is a name-value pair defined with the <property> tag, and > its identifier is the value of the "name=..." attribute > 2. A "Reference" is defined by any object definition using its "id=..." > attribute (is this aka a "Type"?) > 3. By default (without inheritRefs and nested reference tags), <ant> and > <antcall> establish a new scope for reference objects. That is: > * At the point in the calling buildfile where the sub-ant is invoked, > there exists a set of visible reference objects > * In the called buildfile, that set of reference objects is NOT > visible > 4. Reference objects can be made visible inside the sub-build using > inheritRefs="true", or by providing explicit nested <reference> tags inside > the <ant> or <antcall> that invoked the sub-build. > -- David Weintraub qazw...@gmail.com