git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@832936 13f79535-47bb-0310-9956-ffa450edef68master
@@ -44,14 +44,14 @@ or character data nested into the element.</p> | |||
</tr> | |||
<tr> | |||
<td valign="top">if</td> | |||
<td valign="top">Only fail if a property of the given name exists | |||
<td valign="top">Only fail <a href="../properties.html#if+unless">if a property of the given name exists</a> | |||
in the current project</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">unless</td> | |||
<td valign="top">Only fail if a property of the given name doesn't | |||
exist in the current project</td> | |||
<td valign="top">Only fail <a href="../properties.html#if+unless">if a property of the given name doesn't | |||
exist</a> in the current project</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
@@ -301,12 +301,12 @@ element is used to perform Entity and URI resolution.</p> | |||
</tr> | |||
<tr> | |||
<td valign="top">if</td> | |||
<td valign="top">The param will only passed if this property is set.</td> | |||
<td valign="top">The param will only be passed <a href="../properties.html#if+unless">if this property is set</a>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">unless</td> | |||
<td valign="top">The param will only passed unless this property is set.</td> | |||
<td valign="top">The param will not be passed <a href="../properties.html#if+unless">if this property is set</a>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
@@ -82,13 +82,13 @@ exclude.</p> | |||
</tr> | |||
<tr> | |||
<td valign="top">if</td> | |||
<td valign="top">Only use this pattern if the named property is set.</td> | |||
<td valign="top">Only use this pattern <a href="../properties.html#if+unless">if the named property is set</a>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">unless</td> | |||
<td valign="top">Only use this pattern if the named property is | |||
<b>not</b> set.</td> | |||
<td valign="top">Only use this pattern <a href="../properties.html#if+unless">if the named property is | |||
<b>not</b> set</a>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
</table> | |||
@@ -113,13 +113,13 @@ you can use to test the existance of a property.</p> | |||
</tr> | |||
<tr> | |||
<td valign="top">if</td> | |||
<td valign="top">Only read this file if the named property is set.</td> | |||
<td valign="top">Only read this file <a href="../properties.html#if+unless">if the named property is set</a>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">unless</td> | |||
<td valign="top">Only read this file if the named property is | |||
<b>not</b> set.</td> | |||
<td valign="top">Only read this file <a href="../properties.html#if+unless">if the named property is | |||
<b>not</b> set</a>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
</table> | |||
@@ -1380,15 +1380,15 @@ Select files whose filename length is even. | |||
</tr> | |||
<tr> | |||
<td valign="top">if</td> | |||
<td valign="top">Allow files to be selected only if the named | |||
property is set. | |||
<td valign="top">Allow files to be selected only <a href="../properties.html#if+unless">if the named | |||
property is set</a>. | |||
</td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">unless</td> | |||
<td valign="top">Allow files to be selected only if the named | |||
property is <b>not</b> set. | |||
<td valign="top">Allow files to be selected only <a href="../properties.html#if+unless">if the named | |||
property is <b>not</b> set</a>. | |||
</td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
@@ -414,12 +414,12 @@ time.</p> | |||
</tr> | |||
<tr> | |||
<td valign="top">if</td> | |||
<td valign="top">Only use formatter if the named property is set.</td> | |||
<td valign="top">Only use formatter <a href="../properties.html#if+unless">if the named property is set</a>.</td> | |||
<td align="center">No; default is <code>true</code>.</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">unless</td> | |||
<td valign="top">Only use formatter if the named property is <b>not</b> set.</td> | |||
<td valign="top">Only use formatter <a href="../properties.html#if+unless">if the named property is <b>not</b> set</a>.</td> | |||
<td align="center">No; default is <code>true</code>.</td> | |||
</tr> | |||
</table> | |||
@@ -493,12 +493,12 @@ time.</p> | |||
</tr> | |||
<tr> | |||
<td valign="top">if</td> | |||
<td valign="top">Only run test if the named property is set.</td> | |||
<td valign="top">Only run test <a href="../properties.html#if+unless">if the named property is set</a>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">unless</td> | |||
<td valign="top">Only run test if the named property is <b>not</b> set.</td> | |||
<td valign="top">Only run test <a href="../properties.html#if+unless">if the named property is <b>not</b> set</a>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
</table> | |||
@@ -571,12 +571,12 @@ supported.</p> | |||
</tr> | |||
<tr> | |||
<td valign="top">if</td> | |||
<td valign="top">Only run tests if the named property is set.</td> | |||
<td valign="top">Only run tests <a href="../properties.html#if+unless">if the named property is set</a>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">unless</td> | |||
<td valign="top">Only run tests if the named property is <strong>not</strong> set.</td> | |||
<td valign="top">Only run tests <a href="../properties.html#if+unless">if the named property is <strong>not</strong> set</a>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
</table> | |||
@@ -143,12 +143,12 @@ These tags can pass XSL parameters to the stylesheet. | |||
</tr> | |||
<tr> | |||
<td valign="top">if</td> | |||
<td valign="top">The param will only passed if this property is set.</td> | |||
<td valign="top">The param will only be passed <a href="../properties.html#if+unless">if this property is set</a>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">unless</td> | |||
<td valign="top">The param will only passed unless this property is set.</td> | |||
<td valign="top">The param will not be passed <a href="../properties.html#if+unless">if this property is set</a>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
</table> | |||
@@ -61,7 +61,7 @@ | |||
</p> | |||
<p>In addition, Ant has some built-in properties:</p> | |||
<pre> | |||
<pre><!-- XXX use <dl><dt><code>...</code></dt><dd>...</dd></dl> instead --> | |||
basedir the absolute path of the project's basedir (as set | |||
with the basedir attribute of <a href="using.html#projects"><project></a>). | |||
ant.file the absolute path of the buildfile. | |||
@@ -194,7 +194,8 @@ public class ToStringEvaluator implements PropertyHelper.PropertyEvaluator { | |||
public Object evaluate(String property, PropertyHelper propertyHelper) { | |||
Object o = null; | |||
if (property.startsWith(prefix) && propertyHelper.getProject() != null) { | |||
o = propertyHelper.getProject().getReference(property.substring(prefix.length())); | |||
o = propertyHelper.getProject().getReference( | |||
property.substring(prefix.length())); | |||
} | |||
return o == null ? null : o.toString(); | |||
} | |||
@@ -323,4 +324,73 @@ public void setAttr(Resource r) { ... } | |||
<my:task attr="${ant.refid:anturl}"/> | |||
</pre> | |||
<h2><a name="if+unless">If/Unless Attributes</a></h2> | |||
<p> | |||
The <code><target></code> element and various tasks (such as | |||
<code><exit></code>) and task elements (such as <code><test></code> | |||
in <code><junit></code>) support <code>if</code> and <code>unless</code> | |||
attributes which can be used to control whether the item is run or otherwise | |||
takes effect. | |||
</p> | |||
<p> | |||
In Ant 1.7.1 and earlier, these attributes could only be property names. | |||
The item was enabled if a property with that name was defined - even to be | |||
the empty string or <tt>false</tt> - and disabled if the property was not | |||
defined. For example, the following works but there is no way to override | |||
the file existence check negatively (only positively): | |||
</p> | |||
<pre> | |||
<target name="-check-use-file"> | |||
<available property="file.exists" file="some-file"/> | |||
</target> | |||
<target name="use-file" depends="-check-use-file" <b>if="file.exists"</b>> | |||
<!-- do something requiring that file... --> | |||
</target> | |||
<target name="lots-of-stuff" depends="use-file,other-unconditional-stuff"/> | |||
</pre> | |||
<p> | |||
As of Ant 1.8.0, you may instead use property expansion; a value of | |||
<tt>true</tt> (or <tt>on</tt> or <tt>yes</tt>) will enable the | |||
item, while <tt>false</tt> (or <tt>off</tt> or <tt>no</tt>) will | |||
disable it. Other values are still assumed to be property | |||
names and so the item is enabled only if the named property is defined. | |||
</p> | |||
<p> | |||
Compared to the older style, this gives you additional flexibility, because | |||
you can override the condition from the command line or parent scripts: | |||
</p> | |||
<pre> | |||
<target name="-check-use-file" <b>unless="file.exists"</b>> | |||
<available property="file.exists" file="some-file"/> | |||
</target> | |||
<target name="use-file" depends="-check-use-file" <b>if="${file.exists}"</b>> | |||
<!-- do something requiring that file... --> | |||
</target> | |||
<target name="lots-of-stuff" depends="use-file,other-unconditional-stuff"/> | |||
</pre> | |||
<p> | |||
Now <code>ant -Dfile.exists=false lots-of-stuff</code> will run | |||
<code>other-unconditional-stuff</code> but not <code>use-file</code>, | |||
as you might expect, and you can disable the condition from another script | |||
too: | |||
</p> | |||
<pre> | |||
<antcall target="lots-of-stuff"> | |||
<param name="file.exists" value="false"/> | |||
</antcall> | |||
</pre> | |||
<p> | |||
Similarly, an <code>unless</code> attribute disables the item if it is | |||
either the name of property which is defined, or if it evaluates to a | |||
<tt>true</tt>-like value. For example, the following allows you to define | |||
<tt>skip.printing.message=true</tt> in <tt>my-prefs.properties</tt> with | |||
the results you might expect: | |||
</p> | |||
<pre> | |||
<property file="my-prefs.properties"/> | |||
<target name="print-message" <b>unless="${skip.printing.message}"</b>> | |||
<echo>hello!</echo> | |||
</target> | |||
</pre> | |||
</body> |
@@ -188,13 +188,13 @@ executed first.</p> | |||
<tr> | |||
<td valign="top">if</td> | |||
<td valign="top">the name of the property that must be set in order for this | |||
target to execute.</td> | |||
target to execute, or <a href="properties.html#if+unless">something evaluating to true</a>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">unless</td> | |||
<td valign="top">the name of the property that must not be set in order | |||
for this target to execute.</td> | |||
for this target to execute, or <a href="properties.html#if+unless">something evaluating to false</a>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||