Browse Source

Added target attribute for external links

(the web is no longer frame-friendly…)
master
Gintas Grigelionis 7 years ago
parent
commit
97d81a726d
88 changed files with 1539 additions and 1750 deletions
  1. +11
    -12
      manual/Integration/jext-plugin.html
  2. +2
    -2
      manual/Tasks/BorlandEJBTasks.html
  3. +2
    -1
      manual/Tasks/cab.html
  4. +6
    -6
      manual/Tasks/changelog.html
  5. +18
    -18
      manual/Tasks/checksum.html
  6. +2
    -2
      manual/Tasks/concat.html
  7. +3
    -3
      manual/Tasks/conditions.html
  8. +3
    -3
      manual/Tasks/cvs.html
  9. +2
    -2
      manual/Tasks/cvspass.html
  10. +1
    -1
      manual/Tasks/cvstagdiff.html
  11. +6
    -6
      manual/Tasks/defaultexcludes.html
  12. +1
    -1
      manual/Tasks/delete.html
  13. +2
    -1
      manual/Tasks/depend.html
  14. +13
    -11
      manual/Tasks/ear.html
  15. +3
    -3
      manual/Tasks/echo.html
  16. +27
    -21
      manual/Tasks/ejb.html
  17. +14
    -14
      manual/Tasks/exec.html
  18. +26
    -25
      manual/Tasks/ftp.html
  19. +3
    -3
      manual/Tasks/import.html
  20. +2
    -2
      manual/Tasks/include.html
  21. +20
    -20
      manual/Tasks/jar.html
  22. +5
    -4
      manual/Tasks/jarlib-available.html
  23. +4
    -4
      manual/Tasks/jarlib-display.html
  24. +4
    -4
      manual/Tasks/jarlib-manifest.html
  25. +4
    -4
      manual/Tasks/jarlib-resolve.html
  26. +2
    -2
      manual/Tasks/java.html
  27. +13
    -11
      manual/Tasks/javac.html
  28. +16
    -14
      manual/Tasks/javadoc.html
  29. +6
    -5
      manual/Tasks/javah.html
  30. +2
    -1
      manual/Tasks/jdepend.html
  31. +3
    -3
      manual/Tasks/jjdoc.html
  32. +3
    -3
      manual/Tasks/jjtree.html
  33. +6
    -5
      manual/Tasks/jspc.html
  34. +4
    -3
      manual/Tasks/junit.html
  35. +4
    -4
      manual/Tasks/junitreport.html
  36. +1
    -1
      manual/Tasks/loadfile.html
  37. +1
    -1
      manual/Tasks/loadresource.html
  38. +4
    -4
      manual/Tasks/macrodef.html
  39. +4
    -4
      manual/Tasks/mail.html
  40. +4
    -4
      manual/Tasks/manifest.html
  41. +4
    -3
      manual/Tasks/mimemail.html
  42. +1
    -1
      manual/Tasks/parallel.html
  43. +1
    -1
      manual/Tasks/pathconvert.html
  44. +8
    -7
      manual/Tasks/property.html
  45. +1
    -1
      manual/Tasks/pvcstask.html
  46. +7
    -7
      manual/Tasks/rmic.html
  47. +11
    -10
      manual/Tasks/schemavalidate.html
  48. +13
    -12
      manual/Tasks/script.html
  49. +10
    -11
      manual/Tasks/scriptdef.html
  50. +2
    -2
      manual/Tasks/setpermissions.html
  51. +10
    -9
      manual/Tasks/signjar.html
  52. +2
    -2
      manual/Tasks/sos.html
  53. +2
    -2
      manual/Tasks/sql.html
  54. +1
    -1
      manual/Tasks/style.html
  55. +2
    -2
      manual/Tasks/tar.html
  56. +1
    -1
      manual/Tasks/touch.html
  57. +9
    -10
      manual/Tasks/tstamp.html
  58. +8
    -7
      manual/Tasks/typedef.html
  59. +4
    -4
      manual/Tasks/unzip.html
  60. +8
    -6
      manual/Tasks/xmlvalidate.html
  61. +6
    -6
      manual/Tasks/zip.html
  62. +40
    -50
      manual/Types/assertions.html
  63. +9
    -9
      manual/Types/extension.html
  64. +8
    -9
      manual/Types/extensionset.html
  65. +48
    -51
      manual/Types/filterchain.html
  66. +81
    -85
      manual/Types/mapper.html
  67. +13
    -24
      manual/Types/regexp.html
  68. +212
    -217
      manual/Types/selectors.html
  69. +26
    -31
      manual/Types/tarfileset.html
  70. +57
    -61
      manual/Types/xmlcatalog.html
  71. +19
    -23
      manual/Types/zipfileset.html
  72. +6
    -7
      manual/api/index.html
  73. +12
    -14
      manual/cover.html
  74. +6
    -6
      manual/develop.html
  75. +2
    -2
      manual/developlist.html
  76. +32
    -33
      manual/feedback.html
  77. +20
    -18
      manual/ide.html
  78. +12
    -14
      manual/install.html
  79. +110
    -135
      manual/listeners.html
  80. +69
    -92
      manual/platform.html
  81. +150
    -203
      manual/properties.html
  82. +6
    -5
      manual/proxy.html
  83. +4
    -5
      manual/running.html
  84. +26
    -28
      manual/tasksoverview.html
  85. +15
    -13
      manual/tutorial-HelloWorldWithAnt.html
  86. +33
    -27
      manual/tutorial-tasks-filesets-properties.html
  87. +6
    -6
      manual/tutorial-writing-tasks.html
  88. +149
    -239
      manual/using.html

+ 11
- 12
manual/Integration/jext-plugin.html View File

@@ -30,25 +30,24 @@ by
<hr/>

<p>You can download the plugin
at: <a href="http://sourceforge.net/projects/jext/files/OldFiles/antwork_plugin.zip/download">http://sourceforge.net/projects/jext/files/OldFiles/antwork_plugin.zip/download</a></p>
at: <a href="http://sourceforge.net/projects/jext/files/OldFiles/antwork_plugin.zip/download"
target="_top">http://sourceforge.net/projects/jext/files/OldFiles/antwork_plugin.zip/download</a></p>

<h2>Installation instructions from the Readme.txt</h2>

<p>You have to enable the Jext Console to see the Apache Ant output (menu:
Edit&rarr;Options&hellip;&ndash;General Panel), because Ant messages are
redirected to the Jext console.</p>
Edit&rarr;Options&hellip;&ndash;General Panel), because Ant messages are redirected to the Jext
console.</p>

<p>You can configure the Ant call in the Jext menu: Edit&rarr;Options&hellip;&ndash;
Plugin Options&ndash;Antwork Plugin Panel; here you can set Ant home
directory and the path to your build file.</p>
<p>You can configure the Ant call in the Jext menu: Edit&rarr;Options&hellip;&ndash; Plugin
Options&ndash;Antwork Plugin Panel; here you can set Ant home directory and the path to your build
file.</p>

<p>You can start AntWork in the menu: Plugins&rarr;Ant&rarr;Work Now! In the
appearing dialog box you can enter the target which you want to
compile.</p>
<p>You can start AntWork in the menu: Plugins&rarr;Ant&rarr;Work Now! In the appearing dialog box
you can enter the target which you want to compile.</p>

<p>If a <code>javac</code> error occurs in the Ant run, an error list opens within
Jext. With a double click on the error message you jump to the error
in the specified Java source file.</p>
<p>If a <code>javac</code> error occurs in the Ant run, an error list opens within Jext. With a
double click on the error message you jump to the error in the specified Java source file.</p>

</body>
</html>

+ 2
- 2
manual/Tasks/BorlandEJBTasks.html View File

@@ -36,8 +36,8 @@ Deployment Descriptor, builds the jar file including the support files and verif
produced jar is valid or not.</p>

<p>Benoit Moussaud maintains a
separate <a href="https://web.archive.org/web/20141122083215/http://www.moussaud.org/ejbjar.html">FAQ</a>
for this task at his homepage.</p>
separate <a href="https://web.archive.org/web/20141122083215/http://www.moussaud.org/ejbjar.html"
target="_top">FAQ</a> for this task at his homepage.</p>

<h3>Borland element</h3>
<table class="attr">


+ 2
- 1
manual/Tasks/cab.html View File

@@ -31,7 +31,8 @@ the <a href="../Tasks/jar.html">jar</a> or <a href="../Tasks/zip.html">zip</a> t
will work on Windows using the external <code>cabarc</code> tool (provided by Microsoft) which must
be located in your executable path.</p>
<p>To use this task on other platforms you need to download and compile <code>libcabinet</code>
from <a href="https://www.freshports.org/archivers/libcabinet/">https://www.freshports.org/archivers/libcabinet/</a>.</p>
from <a href="https://www.freshports.org/archivers/libcabinet/"
target="_top">https://www.freshports.org/archivers/libcabinet/</a>.</p>
<p>See the section on <a href="../dirtasks.html#directorybasedtasks">directory based tasks</a>, on
how the inclusion/exclusion of files works, and how to write patterns.</p>
<p>This task forms an implicit <a href="../Types/fileset.html">FileSet</a> and supports most


+ 6
- 6
manual/Tasks/changelog.html View File

@@ -28,12 +28,12 @@
<h3>Description</h3>
<p>Generates an XML-formatted report file of the change logs recorded in
a <a href="https://www.nongnu.org/cvs/" target="_top">CVS</a> repository.</p>
<p><strong>Important</strong>: This task needs <code>cvs</code> on the path. If it isn't, you will get
an error (such as error <code>2</code> on Windows). If <code>&lt;cvs&gt;</code> doesn't work, try to
execute <code>cvs.exe</code> from the command line in the target directory in which you are working.
Also note that this task assumes that the cvs executable is compatible with the Unix version, this
is not completely true for certain other CVS clients&mdash;like CVSNT for example&mdash;and some
operation may fail when using such an incompatible client.</p>
<p><strong>Important</strong>: This task needs <code>cvs</code> on the path. If it isn't, you will
get an error (such as <code>error=2</code> on Windows). If <code>&lt;cvs&gt;</code> doesn't work,
try to execute <code>cvs.exe</code> from the command line in the target directory in which you are
working. Also note that this task assumes that the cvs executable is compatible with the Unix
version, this is not completely true for certain other CVS clients&mdash;like CVSNT for
example&mdash;and some operation may fail when using such an incompatible client.</p>
<h3>Parameters</h3>
<table class="attr">
<tr>


+ 18
- 18
manual/Tasks/checksum.html View File

@@ -31,19 +31,19 @@
<p>Note that many popular message digest functions&mdash;including MD5 and SHA-1&mdash;have been
broken recently. If you are going to use the task to create checksums used in an environment where
security is important, please take some time to investigate the algorithms offered by your JCE
provider. Note also that some JCE providers like the one
by <a href="https://www.bouncycastle.org/">The Legion of the Bouncy Castle</a>,
the <a href="https://www.gnu.org/software/gnu-crypto/">GNU project</a>
or <a href="https://jce.iaik.tugraz.at/sic/Products">the Technical University Graz</a> offer more
digest algorithms than those built-in into your JDK.</p>
provider. Note also that some JCE providers like the one by <a href="https://www.bouncycastle.org/"
target="_top">The Legion of the Bouncy Castle</a>,
the <a href="https://www.gnu.org/software/gnu-crypto/" target="_top">GNU project</a>
or <a href="https://jce.iaik.tugraz.at/sic/Products" target="_top">the Technical University Graz</a>
offer more digest algorithms than those built-in into your JDK.</p>

<p>Warning: the case of the extension is that of the algorithm used. If you ask
for <samp>SHA1</samp>, you get a <samp>.SHA1</samp> extension; if you ask for <samp>sha1</samp>, you
get a file ending in <samp>.sha1</samp>. The Java Crypto Engines are case-insensitive in matching
algorithms, so choose a name to match your desired output extension, or set the <var>fileext</var>
attribute. The names of common hashing algorithms can be located on the <a target="_blank"
href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#MessageDigest">Cryptography
Architecture Standard Algorithm Name Documentation</a></p>
attribute. The names of common hashing algorithms can be located on
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#MessageDigest"
target="_top">Cryptography Architecture Standard Algorithm Name Documentation</a></p>

<h3>Parameters</h3>
<table class="attr">
@@ -66,10 +66,10 @@ Architecture Standard Algorithm Name Documentation</a></p>
</tr>
<tr>
<td>algorithm</td>
<td>Specifies the algorithm to be used to compute the checksum. Please check the
<a target="_blank"
href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#MessageDigest">documentation</a>
for available algorithm names, like <q>SHA-1</q> or <q>SHA-512</q>.
<td>Specifies the algorithm to be used to compute the checksum. Please check
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#MessageDigest"
target="_top">documentation</a> for available algorithm names, like <q>SHA-1</q>
or <q>SHA-512</q>.
</td>
<td>No; defaults to <q>MD5</q></td>
</tr>
@@ -101,12 +101,12 @@ Architecture Standard Algorithm Name Documentation</a></p>
<tr>
<td>pattern</td>
<td>Specifies the pattern to use as a pattern suitable
for <a href="https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html">MessageFormat</a>
where <code>{0}</code> is replaced with the checksum and <code>{1}</code> with the file
name. <em>Since Ant 1.7.0</em><br/><em>Since Ant 1.8.2</em> <code>{2}</code> is replaced by the
path of the file relative to the checksum file being written, <code>{3}</code> with tha path of
the file relative to the project's <var>basedir</var> and <code>{4}</code> with the absolute
path of the file.</td>
for <a href="https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html"
target="_top">MessageFormat</a> where <code>{0}</code> is replaced with the checksum
and <code>{1}</code> with the file name. <em>Since Ant 1.7.0</em><br/><em>Since Ant
1.8.2</em> <code>{2}</code> is replaced by the path of the file relative to the checksum file
being written, <code>{3}</code> with the path of the file relative to the
project's <var>basedir</var> and <code>{4}</code> with the absolute path of the file.</td>
<td>No; default is <q>{0}</q></td>
</tr>
<tr>


+ 2
- 2
manual/Tasks/concat.html View File

@@ -81,8 +81,8 @@
<tr>
<td>encoding</td>
<td>Specifies the encoding for the input files. Please
see <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html">Supported
Encodings</a> for a list of possible values.</td>
see <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html"
target="_top">Supported Encodings</a> for a list of possible values.</td>
<td>No; defaults to default JVM character encoding</td>
</tr>
<tr>


+ 3
- 3
manual/Tasks/conditions.html View File

@@ -28,7 +28,7 @@
<p>Conditions are nested elements of the <a href="condition.html"><code>&lt;condition&gt;</code></a>
and <a href="waitfor.html"><code>&lt;waitfor&gt;</code></a> tasks. There are core conditions and
custom conditions. Custom conditions are described
in <a href="../Types/custom-programming.html#customconditions"> Custom Conditions</a>. Core
in <a href="../Types/custom-programming.html#customconditions">Custom Conditions</a>. Core
Conditions are described below.</p>
<h3 id="coreconditions">Core Conditions</h3>

@@ -440,8 +440,8 @@ include tasks, datatypes, scriptdefs, macrodefs and presetdefs.</p>

<p>Evaluate a condition based on a script in any <a href="https://jakarta.apache.org/bsf"
target="_top">Apache BSF</a>
or <a href="https://jcp.org/aboutJava/communityprocess/maintenance/jsr223/223ChangeLog.html">JSR
223</a> supported language.</p>
or <a href="https://jcp.org/aboutJava/communityprocess/maintenance/jsr223/223ChangeLog.html"
target="_top">JSR 223</a> supported language.</p>
<p>See the <a href="../Tasks/script.html">Script</a> task for an explanation of scripts and
dependencies.</p>



+ 3
- 3
manual/Tasks/cvs.html View File

@@ -29,7 +29,7 @@
<p>Handles packages/modules retrieved from a <a href="https://www.nongnu.org/cvs/"
target="_top">CVS</a> repository.</p>
<p><strong>Important:</strong> This task needs <code>cvs</code> binary on the path. If it isn't, you
will get an error (such as error <code>2</code> on Windows). If <code>&lt;cvs&gt;</code> doesn't
will get an error (such as <code>error=2</code> on Windows). If <code>&lt;cvs&gt;</code> doesn't
work, try to execute <code>cvs.exe</code> from the command line in the target directory in which you
are working. Also note that this task assumes that the cvs executable is compatible with the Unix
version, this is not completely true for certain other CVS clients&mdash;like CVSNT for
@@ -38,8 +38,8 @@ example&mdash;and some operation may fail when using such an incompatible client
<p><strong>CVSNT Note</strong>: CVSNT prefers users to store the passwords inside the registry. If
the <a href="cvspass.html">cvspass task</a> and the <var>passfile</var> attribute don't seem to work
for you, the most likely reason is that CVSNT ignores your <samp>.cvspass</samp> file completely.
See <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=21657#c5">bugzilla report 21657</a>
for recommended workarounds.</p>
See <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=21657#c5" target="_top">bugzilla
report 21657</a> for recommended workarounds.</p>

<h3>Parameters</h3>
<table class="attr">


+ 2
- 2
manual/Tasks/cvspass.html View File

@@ -32,8 +32,8 @@ a <code>cvs login</code> command.</p>
<p><strong>CVSNT Note</strong>: CVSNT prefers users to store the passwords inside the registry. If
the task doesn't seem to work for you, the most likely reason is that CVSNT ignores
your <samp>.cvspass</samp> file
completely. See <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=21657#c5">bugzilla
report 21657</a> for recommended workarounds.</p>
completely. See <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=21657#c5"
target="_top">bugzilla report 21657</a> for recommended workarounds.</p>

<h3>Parameters</h3>
<table class="attr">


+ 1
- 1
manual/Tasks/cvstagdiff.html View File

@@ -26,7 +26,7 @@
<p>Generates an XML-formatted report file of the changes between two tags or dates recorded in
a <a href="https://www.nongnu.org/cvs/" target="_top">CVS</a> repository.</p>
<p><strong>Important</strong>: This task needs <code>cvs</code> on the path. If it isn't, you will
get an error (such as error <code>2</code> on Windows). If <code>&lt;cvs&gt;</code> doesn't work,
get an error (such as <code>error=2</code> on Windows). If <code>&lt;cvs&gt;</code> doesn't work,
try to execute <code>cvs.exe</code> from the command line in the target directory in which you are
working. Also note that this task assumes that the cvs executable is compatible with the Unix
version, this is not completely true for certain other CVS clients&mdash;like CVSNT for


+ 6
- 6
manual/Tasks/defaultexcludes.html View File

@@ -84,12 +84,12 @@ normal behavior</p>

<h3>Notes</h3>
<p>By default the pattern <samp>**/.svn</samp> and <samp>**/.svn/**</samp> are set as default
excludes. Since version 1.3, Subversion supports the <a target="_blank"
href="https://subversion.apache.org/docs/release-notes/1.3.html#_svn-hack">&quot;_svn
hack&quot;</a>. That means, that the svn-libraries evaluate environment variables and
use <samp>.svn</samp> or <samp>_svn</samp> directory regarding to that value. We had chosen not to
evaluate environment variables to get a more reliable build. Instead you have to change the settings
by yourself by changing the exclude patterns:</p>
excludes. Since version 1.3, Subversion supports
the <a href="https://subversion.apache.org/docs/release-notes/1.3.html#_svn-hack"
target="_top">&quot;_svn hack&quot;</a>. That means, that the svn-libraries evaluate environment
variables and use <samp>.svn</samp> or <samp>_svn</samp> directory regarding to that value. We had
chosen not to evaluate environment variables to get a more reliable build. Instead you have to
change the settings by yourself by changing the exclude patterns:</p>
<pre>
&lt;defaultexcludes remove=&quot;**/.svn&quot;/&gt;
&lt;defaultexcludes remove=&quot;**/.svn/**&quot;/&gt;


+ 1
- 1
manual/Tasks/delete.html View File

@@ -124,7 +124,7 @@ nested <code>&lt;fileset&gt;</code>.</p>
<tr>
<td>defaultexcludes</td>
<td><em><u>Deprecated</u></em>. Use resource collections. Whether to
use <a href="../dirtasks.html#defaultexcludes"> default excludes.</a></td>
use <a href="../dirtasks.html#defaultexcludes">default excludes.</a></td>
<td>No; default <q>true</q></td>
</tr>
<tr>


+ 2
- 1
manual/Tasks/depend.html View File

@@ -40,7 +40,8 @@ class references encoded into the class files by the compiler. This is generally
the Java source files.</p>

<p>To learn more about how this information is obtained from the class files, please refer
to <a href="https://docs.oracle.com/javase/specs/">the Java Virtual Machine Specification</a></p>
to <a href="https://docs.oracle.com/javase/specs/" target="_top">the Java Virtual Machine
Specification</a></p>

<p>Since a class' dependencies only change when the class itself changes, the
<code>depend</code> task is able to cache dependency information. Only those class files which have


+ 13
- 11
manual/Tasks/ear.html View File

@@ -122,10 +122,10 @@ attribute to a value other than its default, <q>add</q>.</strong></p>
<tr>
<td>filesetmanifest</td>
<td>behavior when a manifest file is found in a <code>zipfileset</code>
or <code>zipgroupfileset</code> file. Valid values are <q>skip</q>, <q>merge</q>,
and <q>mergewithoutmain</q>. <q>merge</q> will merge all of the manifests together, and merge
this into any other specified manifests. <q>mergewithoutmain</q> merges everything but the Main
section of the manifests.</td>
or <code>zipgroupfileset</code> file. Valid values are <q>skip</q>, <q>merge</q>,
and <q>mergewithoutmain</q>. <q>merge</q> will merge all of the manifests together, and merge
this into any other specified manifests. <q>mergewithoutmain</q> merges everything but the
Main section of the manifests.</td>
<td>No; defaults to <q>skip</q></td>
</tr>
<tr>
@@ -142,10 +142,11 @@ attribute to a value other than its default, <q>add</q>.</strong></p>
<tr>
<td>index</td>
<td>whether to create
an <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#JAR_Index">index
list</a> to speed up classloading. This is a JDK 1.3+ specific feature. Unless you specify
additional jars with nested <a href="jar.html#indexjars"><code>indexjars</code></a> elements,
only the contents of this jar will be included in the index.</td>
an <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#JAR_Index"
target="_top">index list</a> to speed up classloading. This is a JDK 1.3+ specific feature.
Unless you specify additional jars with
nested <a href="jar.html#indexjars"><code>indexjars</code></a> elements, only the contents of
this jar will be included in the index.</td>
<td>No; defaults to <q>false</q></td>
</tr>
<tr>
@@ -153,9 +154,10 @@ attribute to a value other than its default, <q>add</q>.</strong></p>
<td>whether to include <samp>META-INF</samp> and its children in the index. Doesn't have any
effect if <var>index</var> is false.<br/>Oracle's jar implementation used to skip
the <samp>META-INF</samp> directory and Ant followed that example. The behavior has been
changed with <a href="https://bugs.openjdk.java.net/browse/JDK-4408526">Java 5</a>. In order
to avoid problems with Ant generated jars on Java 1.4 or earlier, Ant will not
include <samp>META-INF</samp> unless explicitly asked to.<br/><em>Since Ant 1.8.0</em>.</td>
changed with <a href="https://bugs.openjdk.java.net/browse/JDK-4408526" target="_top">Java
5</a>. In order to avoid problems with Ant generated jars on Java 1.4 or earlier, Ant will
not include <samp>META-INF</samp> unless explicitly asked to.<br/><em>Since Ant
1.8.0</em>.</td>
<td>No; defaults to <q>false</q></td>
</tr>
<tr>


+ 3
- 3
manual/Tasks/echo.html View File

@@ -59,7 +59,7 @@ file is available, and the <var>level</var> option is ignored</p>
<td>append</td>
<td>Append to an existing file
(or <a href="https://docs.oracle.com/javase/8/docs/api//java/io/FileWriter.html#FileWriter-java.lang.String-boolean-"
target="_blank"> open a new file / overwrite an existing file</a>)?
target="_top"> open a new file / overwrite an existing file</a>)?
</td>
<td>No; ignored unless <var>output</var> indicates a filesystem destination, default
is <q>false</q></td>
@@ -96,8 +96,8 @@ three lines; the first line is a blank
&lt;/echo&gt;</pre>
<p>The newline immediately following the <code>&lt;echo&gt;</code> tag will be part of the
output. Newlines in character data within the content of an element are not discarded by XML
parsers.<br/>See <a href="https://www.w3.org/TR/xml/#sec-line-ends">W3C Recommendation 26 November
2008 / End of Line handling</a> for more details.</p>
parsers.<br/>See <a href="https://www.w3.org/TR/xml/#sec-line-ends" target="_top">W3C Recommendation
26 November 2008 / End of Line handling</a> for more details.</p>

<pre>&lt;echo message=&quot;Deleting drive C:&quot; level=&quot;debug&quot;/&gt;</pre>
<p>A message which only appears in <code>-debug</code> mode.</p>


+ 27
- 21
manual/Tasks/ejb.html View File

@@ -56,13 +56,15 @@ Server.</p>
<p>The tasks support:</p>

<ul>
<li><a href="http://www.borland.com">Borland</a>Application Server 4.5</li>
<li><a href="https://web.archive.org/web/20020202082841/http://www.iplanet.com:80/products/iplanet_application/home_ias.html">iPlanet</a>Application Server 6.0</li>
<li><a href="http://www.borland.com" target="_top">Borland</a>Application Server 4.5</li>
<li><a href="https://web.archive.org/web/20020202082841/http://www.iplanet.com:80/products/iplanet_application/home_ias.html"
target="_top">iPlanet</a> Application Server 6.0</li>
<li><a href="https://www.jboss.org/" target="_top">JBoss 2.1</a> and above EJB servers</li>
<li><a href="https://web.archive.org/web/20080516210506/http://www.ironflare.com/">Orion Application Server</a> 2.0 (<em>since Ant 1.10.2</em>)</li>
<li><a href="https://web.archive.org/web/20080516210506/http://www.ironflare.com/"
target="_top">Orion Application Server</a> 2.0 (<em>since Ant 1.10.2</em>)</li>
<li><a href="http://www.bea.com" target="_top">WebLogic</a> 4.5.1 through to 7.0 EJB servers</li>
<li><a href="https://jonas.ow2.org/" target="_top">JOnAS</a> 2.4.x and 2.5 Open Source EJB server</li>
<li><a href="https://www.ibm.com/websphere">IBM WebSphere</a> 4.0</li>
<li><a href="https://www.ibm.com/websphere" target="_top">IBM WebSphere</a> 4.0</li>
</ul>
<p>Vendors such as BEA and IBM now provide custom Ant tasks to work with their particular
products. More importantly, EJB 3.0 renders this whole process obsolete. Accordingly, development
@@ -74,16 +76,20 @@ applications and definitely not new EJB 2.x servers.</p>
<h2 id="ejbtasks">EJB Tasks</h2>
<table>
<tr><th>Task</th><th colspan="2">Application Servers</th></tr>
<tr><td><a href="BorlandGenerateClient.html">blgenclient</a></td><td colspan="2">Borland Application Server 4.5 and 5.x</td></tr>
<tr><td><a href="#iplanet-ejbc">iplanet-ejbc</a></td><td colspan="2">iPlanet Application Server 6.0</td></tr>
<tr><td><a href="BorlandGenerateClient.html">blgenclient</a></td><td colspan="2">Borland
Application Server 4.5 and 5.x</td></tr>
<tr><td><a href="#iplanet-ejbc">iplanet-ejbc</a></td><td colspan="2">iPlanet Application Server
6.0</td></tr>
<tr><td rowspan="8"><a href="#ejbjar">ejbjar</a></td><th colspan="2">Nested Elements</th></tr>
<tr><td><a href="BorlandEJBTasks.html">borland</a></td><td>Borland Application Server 4.5 and 5.x</td></tr>
<tr><td><a href="BorlandEJBTasks.html">borland</a></td><td>Borland Application Server 4.5 and
5.x</td></tr>
<tr><td><a href="#ejbjar_iplanet">iPlanet</a></td><td>iPlanet Application Server 6.0</td></tr>
<tr><td><a href="#ejbjar_jboss">jboss</a></td><td>JBoss</td></tr>
<tr><td><a href="#ejbjar_jonas">jonas</a></td><td>JOnAS 2.4.x and 2.5</td></tr>
<tr><td><a href="#ejbjar_weblogic">weblogic</a></td><td>WebLogic 5.1 to 7.0</td></tr>
<tr><td><a href="#ejbjar_websphere">websphere</a></td><td>IBM WebSphere 4.0</td></tr>
<tr><td><a href="#ejbjar_orion">orion</a></td><td>IronFlare (Oracle) Orion Application Server 2.0.6</td></tr>
<tr><td><a href="#ejbjar_orion">orion</a></td><td>IronFlare (Oracle) Orion Application Server
2.0.6</td></tr>
</table>

<hr/>
@@ -504,7 +510,8 @@ specific deployment tools. These currently include:</p>
<li>WebLogic 5.1/6.0 session/entity beans using the <code>weblogic.ejbc</code> tool</li>
<li>IBM WebSphere 4.0</li>
<li>TOPLink for WebLogic 2.5.1-enabled entity beans</li>
<li><a href="https://jonas.ow2.org/">JOnAS</a> 2.4.x and 2.5 Open Source EJB server</li>
<li><a href="https://jonas.ow2.org/" target="_top">JOnAS</a> 2.4.x and 2.5 Open Source EJB
server</li>
<li>IronFlare Orion Application Server 2.0</li>
</ul>

@@ -528,11 +535,10 @@ its target jar file and determine if it is out of date with respect to the class
deployment descriptors that make up the bean. If any of these files are newer than the jar file the
jar will be rebuilt otherwise a message is logged that the jar file is up to date.</p>

<p>The task uses
the <a href="https://commons.apache.org/bcel/">BCEL</a> <a href="../install.html#librarydependencies">library</a>
to extract all dependent classes. This means that, in addition to the classes that are mentioned in
the deployment descriptor, any classes that these depend on are also automatically included in the
jar file.</p>
<p>The task uses the <a href="https://commons.apache.org/bcel/"
target="_top">BCEL</a> <a href="../install.html#librarydependencies">library</a> to extract all
dependent classes. This means that, in addition to the classes that are mentioned in the deployment
descriptor, any classes that these depend on are also automatically included in the jar file.</p>

<h3 id="naming">Naming convention</h3>

@@ -596,10 +602,10 @@ classes or as parameters to the bean's methods.</p>
super classes and super interfaces of the bean classes. For this technique to work the bean classes
had to be loaded into Ant's JVM. This was not always possible due to class dependencies.</p>

<p><em>Since Ant 1.5</em> the task uses the <a href="https://commons.apache.org/bcel/">BCEL</a>
library to analyze the bean's class files directly, rather than loading them into the JVM. This also
allows <code>ejbjar</code> to add all of the required support classes for a bean and not just super
classes.</p>
<p><em>Since Ant 1.5</em> the task uses the <a href="https://commons.apache.org/bcel/"
target="_top">BCEL</a> library to analyze the bean's class files directly, rather than loading them
into the JVM. This also allows <code>ejbjar</code> to add all of the required support classes for a
bean and not just super classes.</p>

<p><em>Since Ant 1.5</em>, a <var>dependency</var> attribute allows the buildfile to control what
additional classes are added to the generated jar. It takes three possible values</p>
@@ -611,9 +617,9 @@ additional classes are added to the generated jar. It takes three possible value
<li><q>full</q>&mdash;In this mode all classes used by the bean's classes and interfaces are added
to the jar</li>
</ul>
<p>The <q>super</q> and <q>full</q> values require
the <a href="https://commons.apache.org/bcel/">BCEL</a> library to be available. If it is
not, <code>ejbjar</code> will drop back to the behaviour corresponding to the value <q>none</q>.</p>
<p>The <q>super</q> and <q>full</q> values require the <a href="https://commons.apache.org/bcel/"
target="_top">BCEL</a> library to be available. If it is not, <code>ejbjar</code> will drop back to
the behaviour corresponding to the value <q>none</q>.</p>

<h3>Parameters</h3>
<table class="attr">


+ 14
- 14
manual/Tasks/exec.html View File

@@ -46,11 +46,11 @@ should be more reliable, as would be something like</p>
<h4>Windows Users</h4>
<p>The <code>&lt;exec&gt;</code> task delegates to <code>Runtime.exec</code> which in turn
apparently
calls <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx"> <code>::CreateProcess</code></a>. It
is the latter Win32 function that defines the exact semantics of the call. In particular, if you do
not put a file extension on the executable, only <samp>.EXE</samp> files are looked for,
not <samp>.COM</samp>, <samp>.CMD</samp> or other file types listed in the environment
variable <code>PATHEXT</code>. That is only used by the shell.</p>
calls <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx"
target="_top"><code>::CreateProcess</code></a>. It is the latter Win32 function that defines the
exact semantics of the call. In particular, if you do not put a file extension on the executable,
only <samp>.EXE</samp> files are looked for, not <samp>.COM</samp>, <samp>.CMD</samp> or other file
types listed in the environment variable <code>PATHEXT</code>. That is only used by the shell.</p>
<p>Note that <samp>.bat</samp> files cannot in general by executed directly. One normally needs to
execute the command shell executable <code>cmd</code> using the <code>/c</code> switch.</p>
<pre>
@@ -75,8 +75,8 @@ the <var>executable</var> attribute in your buildfile.</p>
executable parameter. This is because JVM in which Ant is running is a standard Windows executable
and is not aware of the Cygwin environment (i.e., doesn't load <samp>cygwin1.dll</samp>). The only
work-around for this is to compile a JVM under Cygwin (at your own risk). See for
instance <a href="https://cdn.rawgit.com/AdoptOpenJDK/openjdk-jdk9/dev/common/doc/building.html#cygwin">OpenJDK
build instructions for cygwin</a>.</p>
instance <a href="https://cdn.rawgit.com/AdoptOpenJDK/openjdk-jdk9/dev/common/doc/building.html#cygwin"
target="_top">OpenJDK build instructions for cygwin</a>.</p>

<h4>OpenVMS Users</h4>
<p>The command specified using <code>executable</code> and <code>&lt;arg&gt;</code> elements is
@@ -98,9 +98,9 @@ the <var>fork</var> attribute set to <q>true</q> instead as this task will follo
interpretation of exit codes.</p>

<h4>RedHat S/390 Users</h4>
<p>It has been <a href="https://www.mail-archive.com/linux-390@vm.marist.edu/msg22223.html">reported
on linux-390</a> that shell scripts invoked via the Ant Exec task must have their interpreter
specified, i.e., the scripts must start with something like:</p>
<p>It has been <a href="https://www.mail-archive.com/linux-390@vm.marist.edu/msg22223.html"
target="_top">reported on linux-390</a> that shell scripts invoked via the Ant Exec task must have
their interpreter specified, i.e., the scripts must start with something like:</p>

<pre>#!/bin/bash</pre>
<p>or the task will fail as follows:</p>
@@ -323,10 +323,10 @@ property and have it assigned to the result code (barring immutability, of cours
then <code>&lt;exec&gt;</code> halts the build unless <var>failifexecutionfails</var> is set
to <q>false</q>. You can use that to run a program if it exists, but otherwise do nothing.</p>
<p>What do those error codes mean? Well, they are OS dependent. On Windows boxes you have to look
at <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx"> the
documentation</a>; <code>error=2</code> means 'no such program', which usually means it is not on
the path. Any time you see such an error from any Ant task, it is usually not an Ant bug, but some
configuration problem on your machine.</p>
at <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx"
target="_top">the documentation</a>; <code>error=2</code> means 'no such program', which usually
means it is not on the path. Any time you see such an error from any Ant task, it is usually not an
Ant bug, but some configuration problem on your machine.</p>

<h3>Examples</h3>
<pre>


+ 26
- 25
manual/Tasks/ftp.html View File

@@ -223,8 +223,8 @@ connection.</p>
<tr>
<td colspan="3" class="left">
<p><strong>The following attributes
require <a href="https://commons.apache.org/net/download_net.cgi">jakarta-commons-net-1.4.0 or
greater</a>.</strong></p>
require <a href="https://commons.apache.org/net/download_net.cgi"
target="_top">jakarta-commons-net-1.4.0 or greater</a>.</strong></p>
<p>Use these options when the standard options don't work, because</p>
<ul>
<li>the server is in a different timezone and you need timestamp dependency checking</li>
@@ -259,44 +259,45 @@ connection.</p>
<tr>
<td>serverTimeZoneConfig</td>
<td>Specify as a
Java <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TimeZone.html">TimeZone</a>
identifier, (e.g. <q>GMT</q>, <q>America/Chicago</q> or <q>Asia/Jakarta</q>) the timezone used
by the server for timestamps. This enables timestamp dependency checking even when the server
is in a different time zone from the client. Time Zones know, also, about daylight savings
time, and do not require you to calculate milliseconds of difference. If not specified, (or
specified as <q></q>), the time zone of the client is assumed.<br/><em>Since Ant 1.7</em></td>
Java <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TimeZone.html"
target="_top">TimeZone</a> identifier, (e.g. <q>GMT</q>, <q>America/Chicago</q>
or <q>Asia/Jakarta</q>) the timezone used by the server for timestamps. This enables
timestamp dependency checking even when the server is in a different time zone from the
client. Time Zones know, also, about daylight savings time, and do not require you to
calculate milliseconds of difference. If not specified, (or specified as <q></q>), the time
zone of the client is assumed.<br/><em>Since Ant 1.7</em></td>
<td>No</td>
</tr>
<tr>
<td>defaultDateFormatConfig</td>
<td>Specify in
Java <a href="https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html">SimpleDateFormat</a>
notation, (e.g. <q>yyyy-MM-dd</q>), the date format generally used by the FTP server to parse
dates. In some cases this will be the only date format used. In others, (<q>unix</q> for
example) this will be used for dates older than a year
old. (See <var>recentDateFormatConfig</var>). When specified as <q></q>, default value will
be used.<br/><em>Since Ant 1.7</em></td>
Java <a href="https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html"
target="_top">SimpleDateFormat</a> notation, (e.g. <q>yyyy-MM-dd</q>), the date format
generally used by the FTP server to parse dates. In some cases this will be the only date
format used. In others, (<q>unix</q> for example) this will be used for dates older than a
year old. (See <var>recentDateFormatConfig</var>). When specified as <q></q>, default value
will be used.<br/><em>Since Ant 1.7</em></td>
<td>No; defaults to default date format for the system type indicated
by <var>systemTypeKey</var></td>
</tr>
<tr>
<td>recentDateFormatConfig</td>
<td>Specify in
Java <a href="https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html">SimpleDateFormat</a>
notation, (e.g. <q>MMM dd hh:mm</q>) the date format used by the FTP server to parse dates
less than a year old. If not specified (or specified as <q></q>), and if the system type
indicated by the <var>systemTypeKey</var> uses a recent date format, its standard format will
be used.<br/><em>Since Ant 1.7</em></td>
Java <a href="https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html"
target="_top">SimpleDateFormat</a> notation, (e.g. <q>MMM dd hh:mm</q>) the date format used
by the FTP server to parse dates less than a year old. If not specified (or specified
as <q></q>), and if the system type indicated by the <var>systemTypeKey</var> uses a recent
date format, its standard format will be used.<br/><em>Since Ant 1.7</em></td>
<td>No</td>
</tr>
<tr>
<td>serverLanguageCodeConfig</td>
<td>a <a href="http://www.mathguide.de/info/tools/languagecode.html">two-letter ISO-639 language
code</a> used to specify the language used by the server to format month names. This only
needs to be specified when the server uses non-numeric abbreviations for months in its date
listings in a language other than English. This appears to be becoming rarer and rarer, as
commonly distributed FTP servers seem increasingly to use English or all-numeric formats.
Languages supported are:
<td>a <a href="http://www.mathguide.de/info/tools/languagecode.html" target="_top">two-letter
ISO-639 language code</a> used to specify the language used by the server to format month
names. This only needs to be specified when the server uses non-numeric abbreviations for
months in its date listings in a language other than English. This appears to be becoming
rarer and rarer, as commonly distributed FTP servers seem increasingly to use English or
all-numeric formats. Languages supported are:
<ul>
<li><q>en</q>&mdash;English</li>
<li><q>fr</q>&mdash;French</li>


+ 3
- 3
manual/Tasks/import.html View File

@@ -34,9 +34,9 @@
Ant to use a ProjectHelper other than Ant's default, this task may or may not work.</p>

<p>In the common use case where only Ant's default project helper is used, it basically works like
the <a href="https://ant.apache.org/faq.html#xml-entity-include">Entity Includes as explained in
the Ant FAQ</a>, as if the imported file was contained in the importing file, minus the
top <code>&lt;project&gt;</code> tag.</p>
the <a href="https://ant.apache.org/faq.html#xml-entity-include" target="_top">Entity Includes
as explained in the Ant FAQ</a>, as if the imported file was contained in the importing file,
minus the top <code>&lt;project&gt;</code> tag.</p>

<p>The <code>import</code> task may only be used as a top-level task. This means that it may not
be used in a target.</p>


+ 2
- 2
manual/Tasks/include.html View File

@@ -32,8 +32,8 @@

<p>On execution it will read another Ant file into the same project rewriting the included
target <var>name</var>s and <var>depends</var> lists. This is different
from <a href="https://ant.apache.org/faq.html#xml-entity-include">Entity Includes as explained
in the Ant FAQ</a> insofar as the target names get prefixed by the included
from <a href="https://ant.apache.org/faq.html#xml-entity-include" target="_top">Entity Includes
as explained in the Ant FAQ</a> insofar as the target names get prefixed by the included
project's <var>name</var> or <var>as</var> attribute and do not appear as if the file was
contained in the including file.</p>



+ 20
- 20
manual/Tasks/jar.html View File

@@ -71,15 +71,14 @@ a <code>zipfileset</code> in a <code>Zip</code> task. The one difference is that
the <var>manifest</var> attribute is not specified, the <code>Jar</code> task will include an empty
one for you.)</p>

<p>Manifests are processed by the <code>Jar</code> task according to the <a target="_blank"
href="https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html">Jar file
specification.</a> Note in particular that this may result in manifest lines greater than 72 bytes
being wrapped and continued on the next line.</p>
<p>Manifests are processed by the <code>Jar</code> task according to
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html" target="_top">Jar
file specification.</a> Note in particular that this may result in manifest lines greater than 72
bytes being wrapped and continued on the next line.</p>

<p>The <code>Jar</code> task checks whether you specified package information according to
the <a target="_blank"
href="https://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html#wp90779">
versioning specification</a>.</p>
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html#wp90779"
target="_top">versioning specification</a>.</p>

<p><strong>Please note that the ZIP format allows multiple files of the same fully-qualified name to
exist within a single archive. This has been documented as causing various problems for unsuspecting
@@ -89,7 +88,7 @@ other than its default, <q>add</q>.</strong></p>
<p>To cryptographically sign your JAR file, use the <a href="signjar.html">SignJar task</a> on the
JAR that you create from this task.</p>

<p>For creating a simple version of a <a target="_blank" href="http://openjdk.java.net/jeps/238">JEP
<p>For creating a simple version of a <a href="http://openjdk.java.net/jeps/238" target="_top">JEP
238 multi-release jar</a>, you don't need any special tools. Just set the
required <code>manifest</code> entry and place the files where required, as you could see in
the <a href="#jep238-example">JEP 238 example</a>. If you want to tune this kind of jar,
@@ -202,10 +201,10 @@ e.g. decreasing the size by deleting 'same' classes from the versions-branches,
<tr>
<td>index</td>
<td>whether to create
an <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#JAR_Index">index
list</a> to speed up classloading. This is a JDK 1.3+ specific feature. Unless you specify
additional jars with nested <a href="#indexjars"><code>indexjars</code></a> elements, only the
contents of this jar will be included in the index.</td>
an <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#JAR_Index"
target="_top">index list</a> to speed up classloading. This is a JDK 1.3+ specific feature.
Unless you specify additional jars with nested <a href="#indexjars"><code>indexjars</code></a>
elements, only the contents of this jar will be included in the index.</td>
<td>No; defaults to <q>false</q></td>
</tr>
<tr>
@@ -213,8 +212,8 @@ e.g. decreasing the size by deleting 'same' classes from the versions-branches,
<td>whether to include <samp>META-INF</samp> and its children in the index. Doesn't have any
effect if <var>index</var> is <q>false</q>.<br/>Sun's jar implementation used to skip
the <samp>META-INF</samp> directory and Ant followed that example. The behavior has been
changed with <a href="https://bugs.openjdk.java.net/browse/JDK-4408526">Java 5</a>. In order
to avoid problems with Ant generated jars on Java 1.4 or earlier Ant will not
changed with <a href="https://bugs.openjdk.java.net/browse/JDK-4408526" target="_top">Java
5</a>. In order to avoid problems with Ant generated jars on Java 1.4 or earlier Ant will not
include <samp>META-INF</samp> unless explicitly asked to. <em>Since Ant 1.8.0</em></td>
<td>No; defaults to <q>false</q></td>
</tr>
@@ -355,10 +354,11 @@ to <q>true</q>.</p>
<p><em>Since Ant 1.7.0</em></p>

<p>The nested <code>service</code> element specifies a service. Services are described in
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#Service_Provider">service
provider overview</a>. The approach is to have providers JARs include files named by the service
provided, for example, <samp>META-INF/services/javax.script.ScriptEngineFactory</samp> which can
include implementation class names, one per line (usually just one per JAR).</p>
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#Service_Provider"
target="_top">service provider overview</a>. The approach is to have providers JARs include files
named by the service provided, for
example, <samp>META-INF/services/javax.script.ScriptEngineFactory</samp> which can include
implementation class names, one per line (usually just one per JAR).</p>

<p>The name of the service is set by the <var>type</var> attribute. The classname implementing the
service is the the <var>provider</var> attribute, or if one wants to specify a number of classes
@@ -464,7 +464,7 @@ embeds all the classes from all the jars in <samp>lib/main</samp>.</p>
&lt;include name=&quot;build&quot;/&gt;
&lt;manifest&gt;
&lt;!-- If this is an Applet or Web Start application, include
the proper attributes from <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/jweb/index.html">https://docs.oracle.com/javase/8/docs/technotes/guides/jweb/index.html</a> --&gt;
the proper attributes from <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/jweb/index.html" target="_top">https://docs.oracle.com/javase/8/docs/technotes/guides/jweb/index.html</a> --&gt;
&lt;attribute name=&quot;Permissions&quot; value=&quot;sandbox&quot;/&gt;
&lt;attribute name=&quot;Codebase&quot; value=&quot;example.com&quot;/&gt;
&lt;!-- Who is building this jar? --&gt;
@@ -521,7 +521,7 @@ JDK 6 scripting interface:</p>

<h4 id="jep238-example">JEP 238 example: a Multi-Release JAR Files</h4>
<p>Here we want to create a <em>Multi-Release JAR File</em> according the
specification <a target="_blank" href="http://openjdk.java.net/jeps/238">JEP 238</a>. It defines on
specification <a href="http://openjdk.java.net/jeps/238" target="_top">JEP 238</a>. It defines on
top of a JAR the possibility to place additional or overwriting classes in a jar, which are
available according to the Java version you run.<br/> Basically it says, that you have to set the
manifest entry <code>Multi-Release: true</code> and place all additional or overwriting classes


+ 5
- 4
manual/Tasks/jarlib-available.html View File

@@ -31,10 +31,10 @@ If the extension is present then a property is set.</p>

<p>Note that this task works with extensions as defined by the "Optional Package" specification.
For more information about optional packages, see the document <em>Optional Package Versioning</em>
in the documentation bundle for your Java Standard Edition package, in file
<samp>guide/extensions/versioning.html</samp> or the online <a target="_blank"
href="https://docs.oracle.com/javase/8/docs/technotes/guides/extensions/versioning.html"> Extension
and ExtensionSet documentation</a> for further details.</p>
in the documentation bundle for your Java Standard Edition package, in
file <samp>guide/extensions/versioning.html</samp> or the
online <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/extensions/versioning.html"
target="_top">Extension and ExtensionSet documentation</a> for further details.</p>

<h3>Parameters</h3>
<table class="attr">
@@ -121,3 +121,4 @@ extension in.</p>

</body>
</html>


+ 4
- 4
manual/Tasks/jarlib-display.html View File

@@ -31,10 +31,10 @@ specified jars.</p>

<p>Note that this task works with extensions as defined by the "Optional Package" specification.
For more information about optional packages, see the document <em>Optional Package Versioning</em>
in the documentation bundle for your Java Standard Edition package, in file
<samp>guide/extensions/versioning.html</samp> or the online <a target="_blank"
href="https://docs.oracle.com/javase/8/docs/technotes/guides/extensions/versioning.html"> Extension
and ExtensionSet documentation</a> for further details.</p>
in the documentation bundle for your Java Standard Edition package, in
file <samp>guide/extensions/versioning.html</samp> or the
online <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/extensions/versioning.html"
target="_top">Extension and ExtensionSet documentation</a> for further details.</p>

<h3>Parameters</h3>
<table class="attr">


+ 4
- 4
manual/Tasks/jarlib-manifest.html View File

@@ -32,10 +32,10 @@ specifications in the manifests of the jars.</p>

<p>Note that this task works with extensions as defined by the "Optional Package" specification.
For more information about optional packages, see the document <em>Optional Package Versioning</em>
in the documentation bundle for your Java Standard Edition package, in file
<code>guide/extensions/versioning.html</code> or the online <a target="_blank"
href="https://docs.oracle.com/javase/8/docs/technotes/guides/extensions/versioning.html">Extension
and ExtensionSet documentation</a> for further details.</p>
in the documentation bundle for your Java Standard Edition package, in
file <code>guide/extensions/versioning.html</code> or the
online <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/extensions/versioning.html"
target="_top">Extension and ExtensionSet documentation</a> for further details.</p>

<h3>Parameters</h3>
<table class="attr">


+ 4
- 4
manual/Tasks/jarlib-resolve.html View File

@@ -34,10 +34,10 @@ thrown.</p>

<p>Note that this task works with extensions as defined by the "Optional Package" specification.
For more information about optional packages, see the document <em>Optional Package Versioning</em>
in the documentation bundle for your Java Standard Edition package, in file
<code>guide/extensions/versioning.html</code> or the online <a target="_blank"
href="https://docs.oracle.com/javase/8/docs/technotes/guides/extensions/versioning.html"> Extension
and ExtensionSet documentation</a> for further details.</p>
in the documentation bundle for your Java Standard Edition package, in
file <code>guide/extensions/versioning.html</code> or the
online <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/extensions/versioning.html"
target="_top">Extension and ExtensionSet documentation</a> for further details.</p>

<h3>Parameters</h3>
<table class="attr">


+ 2
- 2
manual/Tasks/java.html View File

@@ -311,8 +311,8 @@ project, <em>not</em> the directory in which the Java task is run. If you need t
relative to the directory the task will be run in, you need to explicitly create the full path to
the JAR file.</p>
<p>When using the <var>jar</var> attribute, all classpath settings are ignored according
to <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html">Oracle's
specification</a>.
to <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html"
target="_top">Oracle's specification</a>.

<h3>Examples</h3>
<pre>


+ 13
- 11
manual/Tasks/javac.html View File

@@ -69,7 +69,7 @@ for either the <code>build.compiler</code> property or the <var>compiler</var> a
(the <a href="https://web.archive.org/web/20050212025507/http://www.dms.at/kopi/index.html"
target="_top">kopi</a> compiler).</li>
<li><q>gcj</q> (the <code>gcj</code> compiler
from <a href="https://gcc.gnu.org/gcc-7/changes.html#java">GCC</a>).</li>
from <a href="https://gcc.gnu.org/gcc-7/changes.html#java" target="_top">GCC</a>).</li>
<li><q>sj</q> (Symantec Java compiler) &ndash; <q>symantec</q> can be used as an alias.</li>
<li><q>extJavac</q> (run either modern or classic in a JVM of its own).</li>
</ul>
@@ -309,8 +309,9 @@ file will not get compiled even if a native header file generated for it would b
magic <a href="../javacprops.html#target"><code>ant.build.javac.target</code></a> property is
set<br/><strong>Note that the default value depends on JDK that is running Ant and
on <var>source</var>
(see <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html#BHCJDCID">Cross-Compilation
Options</a>). We highly recommend to always specify this attribute.</strong></td>
(see <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html#BHCJDCID"
target="_top">Cross-Compilation Options</a>). We highly recommend to always specify this
attribute.</strong></td>
</tr>
<tr>
<td>compiler</td>
@@ -345,9 +346,10 @@ file will not get compiled even if a native header file generated for it would b
compiler for doing unnecessary work. However, for some edge cases, involving generics,
the <code>javac</code> compiler needs to compile the dependent classes to get the generics
information. One example is documented in the bug
report: <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=40776">Bug 40776 - a
problem compiling a Java 5 project with generics</a>. Setting the attribute to <q>false</q>
will cause the compiler to recompile dependent classes. <em>Since Ant 1.7.1</em>.</td>
report: <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=40776" target="_top">Bug
40776 - a problem compiling a Java 5 project with generics</a>. Setting the attribute
to <q>false</q> will cause the compiler to recompile dependent classes. <em>Since Ant
1.7.1</em>.</td>
<td>No; default is <q>true</q></td>
</tr>
<tr>
@@ -578,8 +580,8 @@ certain packages below a common root, use the <var>include</var>/<var>exclude</v
or <code>&lt;include&gt;</code>/<code>&lt;exclude&gt;</code> nested elements to filter for these
packages. Do not include part of your package structure in the <var>srcdir</var> attribute (or
nested <code>&lt;src&gt;</code> elements), or Ant will recompile your source files every time you
run your compile target. See the <a href="https://ant.apache.org/faq.html#always-recompiles">Ant
FAQ</a> for additional information.</p>
run your compile target. See the <a href="https://ant.apache.org/faq.html#always-recompiles"
target="_top">Ant FAQ</a> for additional information.</p>

<p>If you wish to compile only files explicitly specified and disable <code>javac</code>'s default
searching mechanism then you can unset the <var>sourcepath</var> attribute:</p>
@@ -734,9 +736,9 @@ references to strings that can by used in an OS independent fashion
&lt;/javac&gt;</pre>

<h3>OpenJDK notes</h3>
<p>The <a href="http://openjdk.java.net/">openjdk</a> project has provided
the <code>javac</code> <a href="http://openjdk.java.net/groups/compiler/">compiler</a> as an open
source project. The output of this project is a <code>javac.jar</code> which contains
<p>The <a href="http://openjdk.java.net/" target="_top">OpenJDK</a> project has provided
the <code>javac</code> <a href="http://openjdk.java.net/groups/compiler/" target="_top">compiler</a>
as an open source project. The output of this project is a <code>javac.jar</code> which contains
the <code>javac</code> compiler. This compiler may be used with the <code>&lt;javac&gt;</code> task
with the use of a <code>-Xbootclasspath/p</code> Java argument. The argument needs to be given to
the runtime system of the <code>javac</code> executable, so it needs to be prepended with


+ 16
- 14
manual/Tasks/javadoc.html View File

@@ -57,7 +57,7 @@ attribute it is up to you to ensure that this command supports the attributes yo

<p><strong>Note</strong>: When generating the JavaDocs for classes which contains annotations you
maybe get a <code>java.lang.ClassCastException: com.sun.tools.javadoc.ClassDocImpl</code>. This is
due <a href="https://bugs.openjdk.java.net/browse/JDK-6442982" target="_blank">bug-6442982</a>. The
due <a href="https://bugs.openjdk.java.net/browse/JDK-6442982" target="_top">bug-6442982</a>. The
cause is that JavaDoc cannot find the implementations of used annotations. The workaround is
providing the jars with these implementations (like JAXBs <code>@XmlType</code>, ...)
to <code>&lt;javadoc&gt;</code> using <var>classpath</var>, <var>classpathref</var> attributes or
@@ -493,8 +493,8 @@ with the <var>exclude</var> patterns of the <code>packageset</code> (and vice ve
CVE-2013-1571. <em>Since Ant 1.9.2</em><br/> There is a frame injection attack possible in
javadocs generated by Oracle JDKs prior to Java 7 update 25
(<a href="https://www.oracle.com/technetwork/java/javase/7u25-relnotes-1955741.html#jpi-upt"
target="_blank">details</a>). When this flag is set to <q>true</q>, Ant will check whether
the docs are vulnerable and will try to fix them.</td>
target="_top">details</a>). When this flag is set to <q>true</q>, Ant will check whether the
docs are vulnerable and will try to fix them.</td>
<td>1.4</td>
<td>No; defaults to <q>true</q></td>
</tr>
@@ -678,12 +678,12 @@ task.</p>

<h4>doclet</h4>
<p>The doclet nested element is used to specify
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/doclet/overview.html">doclet</a>
that <code>javadoc</code> will use to process the input source files. A number of the
standard <code>javadoc</code> arguments are actually arguments of the standard doclet. If these are
specified in the <code>javadoc</code> task's attributes, they will be passed to the doclet specified
in the <code>&lt;doclet&gt;</code> nested element. Such attributes should only be specified,
therefore, if they can be interpreted by the doclet in use.</p>
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/doclet/overview.html"
target="_top">doclet</a> that <code>javadoc</code> will use to process the input source files. A
number of the standard <code>javadoc</code> arguments are actually arguments of the standard
doclet. If these are specified in the <code>javadoc</code> task's attributes, they will be passed to
the doclet specified in the <code>&lt;doclet&gt;</code> nested element. Such attributes should only
be specified, therefore, if they can be interpreted by the doclet in use.</p>

<p>If the doclet requires additional parameters, these can be specified
with <code>&lt;param&gt;</code> elements within the <code>&lt;doclet&gt;</code> element. These
@@ -742,8 +742,8 @@ those tags.</p>
<td>If this attribute is specified, this element will behave as an
implicit <a href="../Types/fileset.html">fileset</a>. The files included by this fileset
should contain each tag definition on a separate line, as described in
the <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html#javadoctags">Javadoc
reference guide</a>:
the <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html#javadoctags"
target="_top">Javadoc reference guide</a>:
<pre>ejb.bean:t:XDoclet EJB Tag
todo:a:To Do</pre>
<strong>Note</strong>: The Javadoc reference quide has double quotes around the description
@@ -757,9 +757,10 @@ todo:a:To Do</pre>

<h4 id="tagletelement">taglet</h4>
<p>The taglet nested element is used to specify
custom <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/taglet/overview.html">taglets</a>
custom <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/taglet/overview.html"
target="_top">taglets</a>
beyond <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html#javadoctags"
target="_blank">the default taglets</a>.</p>
target="_top">the default taglets</a>.</p>

<h5>Parameters</h5>
<table class="attr">
@@ -771,7 +772,8 @@ target="_blank">the default taglets</a>.</p>
<tr>
<td>name</td>
<td>The name of the taglet class
(e.g. <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/taglet/ToDoTaglet.java"><code>com.sun.tools.doclets.ToDoTaglet</code></a>)</td>
(e.g. <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/taglet/ToDoTaglet.java"
target="_top"><code>com.sun.tools.doclets.ToDoTaglet</code></a>)</td>
<td>Yes</td>
</tr>
<tr>


+ 6
- 5
manual/Tasks/javah.html View File

@@ -29,10 +29,10 @@
<p>Generates JNI headers from a Java class.</p>
<p>When this task executes, it will generate the C header and source files that are needed to
implement native methods. JNI operates differently depending on
whether <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javah.html">JDK
1.2+</a>
or <a href="https://web.archive.org/web/20021018232717/http://java.sun.com/products/jdk/1.1/docs/tooldocs/win32/javah.html">pre-1.2
JDK</a> systems are used.</p>
whether <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javah.html"
target="_top">JDK 1.2+</a>
or <a href="https://web.archive.org/web/20021018232717/http://java.sun.com/products/jdk/1.1/docs/tooldocs/win32/javah.html"
target="_top">pre-1.2 JDK</a> systems are used.</p>

<p>If you are building with Java 8 or above consider
using <a href="javac.html"><code>javac</code></a>'s <var>nativeheaderdir</var> attribute instead
@@ -47,7 +47,8 @@ attribute:</p>
<ul>
<li><q>default</q>&mdash;the default compiler for the platform.</li>
<li><q>sun</q>&mdash;the standard compiler of the JDK.</li>
<li><q>kaffeh</q>&mdash;the native standard compiler of <a href="http://www.kaffe.org" target="_top">Kaffe</a>.</li>
<li><q>kaffeh</q>&mdash;the native standard compiler of <a href="http://www.kaffe.org"
target="_top">Kaffe</a>.</li>
<li><q>gcjh</q>&mdash;the native standard compiler
of <a href="https://gcc.gnu.org/gcc-7/changes.html#java" target="_top">gcj and
gij</a>. <em>Since Apache Ant 1.8.2</em></li>


+ 2
- 1
manual/Tasks/jdepend.html View File

@@ -27,7 +27,8 @@

<h3>Description</h3>

<p>Invokes the <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> parser.</p>
<p>Invokes the <a href="http://www.clarkware.com/software/JDepend.html" target="_top">JDepend</a>
parser.</p>

<p>This parser &quot;traverses a set of Java source file directories and generates design quality
metrics for each Java package&quot;. It allows to &quot;automatically measure the quality of a


+ 3
- 3
manual/Tasks/jjdoc.html View File

@@ -26,9 +26,9 @@
<p><em>Since Apache Ant 1.6</em></p>
<h3>Description</h3>

<p>Invokes the <a href="https://javacc.org/">JJDoc</a> preprocessor for the JavaCC compiler
compiler. It takes a JavaCC parser specification and produces documentation for the BNF grammar. It
can operate in three modes, determined by command line options.
<p>Invokes the <a href="https://javacc.org/" target="_top">JJDoc</a> preprocessor for the JavaCC
compiler compiler. It takes a JavaCC parser specification and produces documentation for the BNF
grammar. It can operate in three modes, determined by command line options.
<p>To use the <code>jjdoc</code> task, set the <var>target</var> attribute to the name of the JavaCC
grammar file to process. You also need to specify the directory containing the JavaCC installation
using the <var>javacchome</var> attribute, so that Ant can find the JavaCC classes. Optionally, you


+ 3
- 3
manual/Tasks/jjtree.html View File

@@ -25,9 +25,9 @@
<h2 id="jjtree">JJTree</h2>

<h3>Description</h3>
<p>Invokes the <a href="https://javacc.org/">JJTree</a> preprocessor for the JavaCC compiler
compiler. It inserts parse tree building actions at various places in the JavaCC source that it
generates. The output of JJTree is run through JavaCC to create the parser.</p>
<p>Invokes the <a href="https://javacc.org/" target="_top">JJTree</a> preprocessor for the JavaCC
compiler compiler. It inserts parse tree building actions at various places in the JavaCC source
that it generates. The output of JJTree is run through JavaCC to create the parser.</p>
<p>To use the <code>jjtree</code> task, set the <var>target</var> attribute to the name of the
JJTree grammar file to process. You also need to specify the directory containing the JavaCC
installation using the <var>javacchome</var> attribute, so that Ant can find the JavaCC


+ 6
- 5
manual/Tasks/jspc.html View File

@@ -31,9 +31,10 @@ the task shipping with Tomcat instead.</em> This task is only tested against To
known problems with Tomcat 5.x that won't get fixed in Ant, please use Tomcat's <code>jspc</code>
task instead.<br/> Instead of relying on container-specific JSP compilers we suggest deploying the
raw files (<samp>*.jsp</samp>) and use the container build-in functions: after deploying run a test
suite (e.g. with <a href="https://attic.apache.org/projects/jakarta-cactus.html">Cactus</a>
or <a href="http://httpunit.sourceforge.net/">HttpUnit</a>) against the deployed web application. So
you'll get the test result <em>and</em> the compiled JSPs.</p>
suite (e.g. with <a href="https://attic.apache.org/projects/jakarta-cactus.html"
target="_top">Cactus</a> or <a href="http://httpunit.sourceforge.net/" target="_top">HttpUnit</a>)
against the deployed web application. So you'll get the test result <em>and</em> the compiled
JSPs.</p>
<h3>Description</h3>

<p>Apache Ant task to run the JSP compiler and turn JSP pages into Java source files.</p>
@@ -47,8 +48,8 @@ dependencies, or <code>&lt;jsp:include&gt;</code> references.</p>

<p>By default the task uses the Jasper JSP compiler. This means the task
needs <samp>jasper.jar</samp> and <samp>jasper-runtime.jar</samp>, which come with builds of Tomcat
4/Catalina from the <a href="https://tomcat.apache.org/">Apache Tomcat project</a>, and any other
jar files which may be needed in future versions (it changes).</p>
4/Catalina from the <a href="https://tomcat.apache.org/" target="_top">Apache Tomcat project</a>,
and any other jar files which may be needed in future versions (it changes).</p>

<p>We recommend (in March 2003) Tomcat version 4.1.x for the most robust version of Jasper.</p>



+ 4
- 3
manual/Tasks/junit.html View File

@@ -25,9 +25,10 @@
<h3>Description</h3>

<p>This task runs tests from the JUnit testing framework. The latest version of the framework can be
found at <a href="https://junit.org">https://junit.org</a>. This task has been tested with JUnit
3.0 up to JUnit 3.8.2; it won't work with versions prior to JUnit 3.0. It also works with JUnit 4.x,
including "pure" JUnit 4 tests using only annotations and no <code>JUnit4TestAdapter</code>.</p>
found at <a href="https://junit.org" target="_top">https://junit.org</a>. This task has been tested
with JUnit 3.0 up to JUnit 3.8.2; it won't work with versions prior to JUnit 3.0. It also works with
JUnit 4.x, including "pure" JUnit 4 tests using only annotations and
no <code>JUnit4TestAdapter</code>.</p>
<p><strong>Note</strong>: This task depends on external libraries not included
in the Apache Ant distribution. See <a href="../install.html#librarydependencies">
Library Dependencies</a> for more information.</p>


+ 4
- 4
manual/Tasks/junitreport.html View File

@@ -34,10 +34,10 @@ information.</p>

<h3>Requirements</h3>

<p>The task needs Apache <a href="https://xml.apache.org/xalan-j/">Xalan 2.4.1+ or Xalan XSLTC</a>
(JDK 1.4 contains a version of Xalan 2.x, while JDK 1.5 ships with a version of XSLTC). JDK 1.4.2-01
and later ships with a bundled Xalan 2.4.1+, meaning that JDKs prior to version 1.4.2-01 won't work
out of the box. The table below summarize the compatibility status.</p>
<p>The task needs Apache <a href="https://xml.apache.org/xalan-j/" target="_top">Xalan 2.4.1+ or
Xalan XSLTC</a> (JDK 1.4 contains a version of Xalan 2.x, while JDK 1.5 ships with a version of
XSLTC). JDK 1.4.2-01 and later ships with a bundled Xalan 2.4.1+, meaning that JDKs prior to version
1.4.2-01 won't work out of the box. The table below summarize the compatibility status.</p>
<table>
<tr><th>Xalan</th><th>Sun JDK Bundle</th><th>Status<th></tr>
<tr><td>2.4.1+</td><td>JDK 1.4.2-01+</td><td>OK</td></tr>


+ 1
- 1
manual/Tasks/loadfile.html View File

@@ -68,7 +68,7 @@ is not set.</p>
</tr>

</table>
<p>The LoadFile task supports nested <a href="../Types/filterchain.html"> FilterChain</a>s.</p>
<p>The LoadFile task supports nested <a href="../Types/filterchain.html">FilterChain</a>s.</p>

<h3>Examples</h3>
<pre>


+ 1
- 1
manual/Tasks/loadresource.html View File

@@ -67,7 +67,7 @@ the property is not set.</p>
<td>No; default is <q>false</q></td>
</tr>
</table>
<p>The LoadResource task supports nested <a href="../Types/filterchain.html"> FilterChain</a>s.</p>
<p>The LoadResource task supports nested <a href="../Types/filterchain.html">FilterChain</a>s.</p>

<h3>Examples</h3>
<pre>


+ 4
- 4
manual/Tasks/macrodef.html View File

@@ -107,9 +107,8 @@
<tr>
<td>doubleexpanding</td>
<td>Controls whether or not property references in the attribute are expanded twice or just
once. See
the <a href="https://ant.apache.org/faq.html#macrodef-property-expansion">FAQ</a> for
details. <em>Since Ant 1.8.3</em></td>
once. See the <a href="https://ant.apache.org/faq.html#macrodef-property-expansion"
target="_top">FAQ</a> for details. <em>Since Ant 1.8.3</em></td>
<td>No; default is <q>true</q></td>
</tr>
</table>
@@ -205,7 +204,8 @@
<p>The following fragment defines a task called <code>&lt;call-cc&gt;</code> which take the
attributes <var>target</var>, <var>link</var> and <var>target.dir</var> and the nested
element <code>cc-elements</code>. The body of the task uses the <code>&lt;cc&gt;</code> task
from the <a href="http://ant-contrib.sourceforge.net/">ant-contrib</a> project.</p>
from the <a href="http://ant-contrib.sourceforge.net/" target="_top">ant-contrib</a>
project.</p>
<pre class="code">
&lt;macrodef name="call-cc"&gt;
&lt;attribute name="target"/&gt;


+ 4
- 4
manual/Tasks/mail.html View File

@@ -84,8 +84,8 @@ more information.</p>
<tr>
<td>messagefileinputencoding</td>
<td>Specifies the encoding of the input file. Please
see <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html">Supported
Encodings</a> for a list of possible values. <em>Since Ant 1.9.4</em>
see <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html"
target="_top">Supported Encodings</a> for a list of possible values. <em>Since Ant 1.9.4</em>
</td>
<td>No; defaults to default JVM character encoding</td>
</tr>
@@ -237,8 +237,8 @@ can contain email addresses of the form:</p>
<td>inputencoding</td>
<td>
Specifies the encoding of the input file. Please
see <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html">Supported
Encodings</a> for a list of possible values. <em>Since Ant 1.9.4</em>
see <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html"
target="_top">Supported Encodings</a> for a list of possible values. <em>Since Ant 1.9.4</em>
</td>
<td>No; defaults to default JVM character encoding</td>
</tr>


+ 4
- 4
manual/Tasks/manifest.html View File

@@ -32,8 +32,8 @@
file.</p>

<p>Manifests are processed according to
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html">Jar file
specification</a>. Specifically, a manifest element consists of a set of attributes and
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html" target="_top">Jar
file specification</a>. Specifically, a manifest element consists of a set of attributes and
sections. These sections in turn may contain attributes. Note in particular that this may result in
manifest lines greater than 72 bytes being wrapped and continued on the next line.</p>

@@ -151,8 +151,8 @@ sections.</p>
attribute will take the value of the Ant property <code>${user.name}</code>. The same is true for
the <code>${version}</code> and <code>${TODAY}</code> properties. This example produces
a <samp>MANIFEST.MF</samp> that
contains <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html#wp90779">package
version identification</a> for the package <samp>common</samp>.</p>
contains <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html#wp90779"
target="_top">package version identification</a> for the package <samp>common</samp>.</p>

<p>The manifest produced by the above would look like this:</p>



+ 4
- 3
manual/Tasks/mimemail.html View File

@@ -31,9 +31,10 @@

<h3>Description</h3>
<p>Sends SMTP mail with MIME
attachments. <a href="https://www.oracle.com/technetwork/java/index-138643.html">JavaMail</a>
and <a href="https://www.oracle.com/technetwork/java/javase/jaf-135115.html">Java Activation
Framework</a> are required for this task.</p>
attachments. <a href="https://www.oracle.com/technetwork/java/index-138643.html"
target="_top">JavaMail</a>
and <a href="https://www.oracle.com/technetwork/java/javase/jaf-135115.html" target="_top">Java
Activation Framework</a> are required for this task.</p>
<p>Multiple files can be attached using <a href="../Types/fileset.html">FileSets.</a></p>
<h3>Parameters</h3>
<table class="attr">


+ 1
- 1
manual/Tasks/parallel.html View File

@@ -99,7 +99,7 @@ complete without waiting for other nested tasks to complete in other threads.</p
is not set, the remaining tasks in other threads will continue to run until all threads have
completed. In this situation, the <code>parallel</code> task will also fail.</p>

<p>The <code>parallel</code> task may be combined with the <a href="sequential.html"> sequential</a>
<p>The <code>parallel</code> task may be combined with the <a href="sequential.html">sequential</a>
task to define sequences of tasks to be executed on each thread within the parallel block</p>

<p>The <var>threadCount</var> attribute can be used to place a maximum number of available threads


+ 1
- 1
manual/Tasks/pathconvert.html View File

@@ -118,7 +118,7 @@ any <var>from</var> values are prefixes of other <var>from</var> values.</p>
<p>If the <var>refid</var> attribute is not specified, then one or more
nested <a href="../Types/resources.html#collection">resource collections</a> must be supplied.</p>
<h4>mapper</h4>
<p>A single nested <a href="../Types/mapper.html"> <code>&lt;mapper&gt;</code></a> element can be
<p>A single nested <a href="../Types/mapper.html"><code>&lt;mapper&gt;</code></a> element can be
specified to perform any of various filename transformations (<em>since Ant 1.6.2</em>).</p>

<h3>Examples</h3>


+ 8
- 7
manual/Tasks/property.html View File

@@ -58,8 +58,8 @@ from a property file.</p>
<p>A list of predefined properties can be
found <a href="../properties.html#built-in-props">here</a>.</p>
<p><em>Since Apache Ant 1.8.0</em>, it is possible to load properties defined in XML according
to <a href="http://java.sun.com/dtd/properties.dtd">Sun DTD</a>, when running on Java 5+. For this
the name of the file, resource or url has to end with <samp>.xml</samp>.</p>
to <a href="http://java.sun.com/dtd/properties.dtd" target="_top">Sun DTD</a>, when running on Java
5+. For this the name of the file, resource or url has to end with <samp>.xml</samp>.</p>

<h3>Parameters</h3>
<table class="attr">
@@ -166,8 +166,8 @@ local definition is available (the table priority order being PROCESS, JOB, GROU
<p><em>Since Ant 1.8.2</em>, if Ant detects it is running on a Java 5 or newer, Ant will
use <code>System.getenv()</code> rather than its own OS dependent native implementation. For some
OSes this causes minor differences when compared to older versions of Ant. For a full list
see <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=49366">Bugzilla Issue 49366</a>. In
particular:</p>
see <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=49366" target="_top">Bugzilla Issue
49366</a>. In particular:</p>
<ul>
<li>On Windows, Ant will now return additional "environment variables" that correspond to the
drive specific current working directories when Ant is run from the command line. The keys of
@@ -244,7 +244,8 @@ on a classpath. Here are some interesting facts about this feature</p>
<li>If the file is not there, nothing is printed except at <code>-verbose</code> log level. This
lets you have optional configuration files for every project, that team members can customize.
<li>The rules for this format
match <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html#load-java.io.InputStream-">java.util.Properties</a>.</li>
match <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html#load-java.io.InputStream-"
target="_top">java.util.Properties</a>.</li>
<li>Trailing spaces are not stripped. It may have been what you wanted.</li>
<li>Want unusual characters? Escape them <code>\u0456</code> or <code>\&quot;</code> style.</li>
<li>Ant Properties are expanded in the file</li>
@@ -265,8 +266,8 @@ deploy.url=http://${deploy.server}:${deploy.port}/</pre>
variables. So it starts a command in a new process which prints the environment variables, analyzes
the output and creates the properties.<br/> There are commands for the following operating systems
implemented
in <a href="https://git-wip-us.apache.org/repos/asf?p=ant.git;a=blob;f=src/main/org/apache/tools/ant/taskdefs/Execute.java;hb=refs/heads/master">Execute.java</a>
(method <code>getProcEnvCommand()</code>):
in <a href="https://git-wip-us.apache.org/repos/asf?p=ant.git;a=blob;f=src/main/org/apache/tools/ant/taskdefs/Execute.java;hb=refs/heads/master"
target="_top">Execute.java</a> (method <code>getProcEnvCommand()</code>):
</p>
<table>
<tr>


+ 1
- 1
manual/Tasks/pvcstask.html View File

@@ -54,7 +54,7 @@ an <var>updateonly</var> argument introduced.</p>
<h2 id="introduction">Introduction</h2>
<p>The <code>pvcs</code> task allows the user of Ant to extract the latest edition of the source
code from a PVCS repository. PVCS is a version control system developed
by <a href="http://www.serena.com/products/pvcs">Merant</a>.</p>
by <a href="http://www.serena.com/products/pvcs" target="_top">Merant</a>.</p>
<p>This version has been tested against PVCS version 6.5 and 6.6 under Windows and Solaris.</p>

<hr/>


+ 7
- 7
manual/Tasks/rmic.html View File

@@ -66,16 +66,16 @@ are the choices:</p>
platform is chosen. If <code>build.rmic</code> is set to this, you get the default.</li>
</ul>

<p>The <a href="https://web.archive.org/web/20131225023602/http://dione.zcu.cz/~toman40/miniRMI/">miniRMI</a>
project contains a compiler implementation for this task as well, please consult miniRMI's
documentation to learn how to use it.</p>
<p>The <a href="https://web.archive.org/web/20131225023602/http://dione.zcu.cz/~toman40/miniRMI/"
target="_top">miniRMI</a> project contains a compiler implementation for this task as well, please
consult miniRMI's documentation to learn how to use it.</p>

<h4>CORBA support</h4>

<p>Java 11 removes the CORBA and JavaEE packages and <code>rmic</code> no longer supports
either <code>iiop</code> nor <code>idl</code>. Starting with Ant 1.10.3, the <code>rmic</code> task
will fail when using either while running Java 11+ unless you fork the task and explicitly specify an
executable.</p>
<p>Java 11 <a href="http://openjdk.java.net/jeps/320" target="_top">removes</a> the Java EE and
CORBA packages and <code>rmic</code> no longer supports either <code>iiop</code>
or <code>idl</code>. Starting with Ant 1.10.3, the <code>rmic</code> task will fail when using
either while running Java 11+ unless you fork the task and explicitly specify an executable.</p>

<h3>Parameters</h3>
<table class="attr">


+ 11
- 10
manual/Tasks/schemavalidate.html View File

@@ -49,12 +49,13 @@ their URL equivalents.</p>
<li><code>&lt;dtd&gt;</code> elements which are used to resolve DTDs and entities.</li>
<li><code>&lt;attribute&gt;</code> elements which are used to set features on the parser. These
can be any number
of <a href="http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html#package_description"><code>http://xml.org/sax/features/</code></a>
or other features that your parser may support.</li>
of <a href="http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html#package_description"
target="_top"><code>http://xml.org/sax/features/</code></a> or other features that your parser
may support.</li>
<li><code>&lt;property&gt;</code> elements, containing string properties</li>
</ul>

<p>The task only supports SAX2 or later parsers: it is an error to specify a esSAX1 parser.</p>
<p>The task only supports SAX2 or later parsers: it is an error to specify a SAX1 parser.</p>

<h3>Parameters</h3>
<table class="attr">
@@ -168,10 +169,10 @@ their URL equivalents.</p>
perform entity resolution.</p>
<h4>attribute</h4>
<p>The <code>&lt;attribute&gt;</code> element is used to set parser features.<br/>Features usable
with the xerces parser are defined
here: <a href="https://xml.apache.org/xerces-j/features.html">Setting features</a><br/>SAX features
are defined
here: <a href="http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html#package_description"><code>http://xml.org/sax/features/</code></a></p>
with the xerces parser are defined here: <a href="https://xml.apache.org/xerces-j/features.html"
target="_top">Setting features</a><br/>SAX features are defined
here: <a href="http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html#package_description"
target="_top"><code>http://xml.org/sax/features/</code></a></p>
<table class="attr">
<tr>
<th>Attribute</th>
@@ -193,8 +194,8 @@ here: <a href="http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html
<h4>property</h4>
<p>The <code>&lt;property&gt;</code> element is used to set properties. These properties are
defined here for the Xerces XML parser
implementation: <a href="https://xml.apache.org/xerces-j/properties.html">XML Parser properties</a>
Properties can be used to set the schema used to validate the XML file.
implementation: <a href="https://xml.apache.org/xerces-j/properties.html" target="_top">XML Parser
properties</a>. Properties can be used to set the schema used to validate the XML file.
</p>
<table class="attr">
<tr>
@@ -237,7 +238,7 @@ is why the <var>noNamespaceFile</var> is needed.</p>
documents against the relevant specifications. To validate XSD documents, you also
need <samp>XMLSchema.dtd</samp> and <samp>datatypes.dtd</samp> in the same directory
as <samp>XMLSchema.xsd</samp>, or pointed to via the catalog. All these files can be fetched
from <a href="https://www.w3.org/2001/XMLSchema">W3C</a>.</p>
from <a href="https://www.w3.org/2001/XMLSchema" target="_top">W3C</a>.</p>
<pre>&lt;validate-soap file="xml/test.xsd"/&gt;</pre>
<p>Use the preset task defined above to validate an XML Schema document.</p>



+ 13
- 12
manual/Tasks/script.html View File

@@ -27,8 +27,8 @@
<h2 id="script">Script</h2>
<h3>Description</h3>
<p>Execute a script in a <a href="https://jakarta.apache.org/bsf" target="_top">Apache BSF</a>
or <a href="https://jcp.org/aboutJava/communityprocess/maintenance/jsr223/223ChangeLog.html">JSR
223</a> supported language.
or <a href="https://jcp.org/aboutJava/communityprocess/maintenance/jsr223/223ChangeLog.html"
target="_top">JSR 223</a> supported language.
</p>
<p><strong>Note</strong>: This task depends on external libraries not included in the Apache Ant
distribution. See <a href="../install.html#librarydependencies">Library Dependencies</a> for more
@@ -46,15 +46,16 @@ Java API, see the <a href="../api/index.html">JavaDoc</a> (especially
for <a href="../api/org/apache/tools/ant/Project.html">Project</a>
and <a href="../api/org/apache/tools/ant/taskdefs/optional/Script.html">Script</a>) for more
information.</p>
<p>If you are using JavaScript under BSF, a good resource is <a target="_blank"
href="https://www.mozilla.org/rhino/doc.html">https://www.mozilla.org/rhino/doc.html</a> as we are
using their JavaScript interpreter.</p>
<p>If you are using JavaScript under BSF, a good resource
is <a href="https://www.mozilla.org/rhino/doc.html"
target="_top">https://www.mozilla.org/rhino/doc.html</a> as we are using their JavaScript
interpreter.</p>
<p>Scripts can do almost anything a task written in Java could do.</p>
<p>Rhino provides a special construct&mdash;the <code>JavaAdapter</code>. With that you can create
an object which implements several interfaces, extends classes and for which you can overwrite
methods. Because this is an undocumented feature (yet), here is the link to an
explanation: <a href="https://groups.google.com/forum/#!msg/netscape.public.mozilla.jseng/YlRQE0OvM8c/F8Mvq-XkpxcJ">Google
Groups: "Rhino, enum.js, JavaAdapter?"</a> by Norris Boyd in the
explanation: <a href="https://groups.google.com/forum/#!msg/netscape.public.mozilla.jseng/YlRQE0OvM8c/F8Mvq-XkpxcJ"
target="_top">Google Groups: "Rhino, enum.js, JavaAdapter?"</a> by Norris Boyd in the
newsgroup <em>netscape.public.mozilla.jseng</em>.</p>

<p>If you are creating Targets programmatically, make sure you set the Location to a useful value.
@@ -273,9 +274,9 @@ with <code>importClass(<strong>Packages</strong>.org.apache.tools.ant.util.FileU
The <code>&lt;script&gt;</code> task populates the Project instance under the
name <code>project</code>, so we can use that reference. Another way is to use its given name or
getting its reference from the task itself.<br/> The Project provides methods for accessing and
setting properties, creating DataTypes and Tasks and much more.<br/> After creating a FileSet object
we initialize that by calling its set-methods. Then we can use that object like a normal Ant task
(<code>&lt;copy&gt;</code> for example).<br/> For getting the size of a file we instantiate
setting properties, creating DataTypes and Tasks and much more.<br/> After creating a FileSet
object we initialize that by calling its set-methods. Then we can use that object like a normal Ant
task (<code>&lt;copy&gt;</code> for example).<br/> For getting the size of a file we instantiate
a <code>java.io.File</code>. So we are using normal Java API here.<br/> Finally we use
the <code>&lt;echo&gt;</code> task for producing the output. The task is not executed by
its <code>execute()</code> method, because the <code>perform()</code> method (implemented in Task
@@ -312,8 +313,8 @@ paths to a referenced path. If the path does not exist, it will be created.</p>
project.addTaskDefinition("addtopath", AddToPath.class);
&lt;/script&gt;</pre>
<p>An example of using this task to create a path from a list of directories (using
antcontrib's <a href="http://ant-contrib.sourceforge.net/tasks/tasks/for.html"> &lt;for&gt;</a>
task) follows:</p>
ant-contrib's <a href="http://ant-contrib.sourceforge.net/tasks/tasks/for.html"
target="_top">&lt;for&gt;</a> task) follows:</p>
<pre>
&lt;path id="main.path"&gt;
&lt;fileset dir="build/classes"/&gt;


+ 10
- 11
manual/Tasks/scriptdef.html View File

@@ -28,14 +28,13 @@
<h3>Description</h3>
<p><code>Scriptdef</code> can be used to define an Apache Ant task using a scripting language. Ant
scripting languages supported by <a href="https://jakarta.apache.org/bsf" target="_top">Apache
BSF</a>
or <a href="https://jcp.org/aboutJava/communityprocess/maintenance/jsr223/223ChangeLog.html">JSR
223</a> may be used to define the script. <code>Scriptdef</code> provides a mechanism to encapsulate
control logic from a build within an Ant task minimizing the need for providing control style tasks
in Ant itself. Complex logic can be made available while retaining the simple structure of an Ant
build file. <code>Scriptdef</code> is also useful for prototyping new custom tasks. Certainly as the
complexity of the script increases it would be better to migrate the task definition into a Java
based custom task.</p>
BSF</a> or <a href="https://jcp.org/aboutJava/communityprocess/maintenance/jsr223/223ChangeLog.html"
target="_top">JSR 223</a> may be used to define the script. <code>Scriptdef</code> provides a
mechanism to encapsulate control logic from a build within an Ant task minimizing the need for
providing control style tasks in Ant itself. Complex logic can be made available while retaining the
simple structure of an Ant build file. <code>Scriptdef</code> is also useful for prototyping new
custom tasks. Certainly as the complexity of the script increases it would be better to migrate the
task definition into a Java based custom task.</p>

<p><strong>Note</strong>: This task depends on external libraries not included in the Ant
distribution. See <a href="../install.html#librarydependencies">Library Dependencies</a> for more
@@ -282,9 +281,9 @@ beanshell jar.</p>

<h3>Testing scripts</h3>

<p>The easiest way to test scripts is to use
the <a href="https://ant.apache.org/antlibs/antunit/">AntUnit</a> Ant library. This will run all
targets in a script that begin with <q>test</q> (and their dependencies).</p>
<p>The easiest way to test scripts is to use the <a href="https://ant.apache.org/antlibs/antunit/"
target="_top">AntUnit</a> Ant library. This will run all targets in a script that begin
with <q>test</q> (and their dependencies).</p>

</body>
</html>

+ 2
- 2
manual/Tasks/setpermissions.html View File

@@ -49,8 +49,8 @@ different sets of permissions to apply to either type of resource.</p>
<tr>
<td>permissions</td>
<td>The permissions to set as comma separated list of names
of <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/file/attribute/PosixFilePermission.html">PosixFilePermission</a>
values.</td>
of <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/file/attribute/PosixFilePermission.html"
target="_top">PosixFilePermission</a> values.</td>
<td>No</td>
</tr>
<tr>


+ 10
- 9
manual/Tasks/signjar.html View File

@@ -27,12 +27,13 @@
<h2 id="signjar">SignJar</h2>
<h3>Description</h3>
<p>Signing a jar allows users to authenticate the publisher.</p>
<p>Signs JAR files with the <a target="_blank"
href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jarsigner.html"><code>jarsigner</code>
command line tool</a>. It will take a named file in the <var>jar</var> attribute, and an
optional <var>destDir</var> or <var>signedJar</var> attribute. Nested paths are also supported; here
only an (optional) <var>destDir</var> is allowed. If a destination directory or explicit JAR file
name is not provided, JARs are signed in place.</p>
<p>Signs JAR files with
the <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jarsigner.html"
target="_top"><code>jarsigner</code> command line tool</a>. It will take a named file in
the <var>jar</var> attribute, and an optional <var>destDir</var> or <var>signedJar</var>
attribute. Nested paths are also supported; here only an (optional) <var>destDir</var> is
allowed. If a destination directory or explicit JAR file name is not provided, JARs are signed in
place.</p>
<p>Dependency rules</p>
<ul>
<li>Nonexistent destination JARs are created/signed</li>
@@ -207,9 +208,9 @@ name is not provided, JARs are signed in place.</p>
</table>

<h3>Examples</h3>
<p>For instructions on generating a code signing certificate, see the <a target="_blank"
href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html">keytool
documentation</a> and/or instructions from your certificate authority.</p>
<p>For instructions on generating a code signing certificate, see
the <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html"
target="_top">keytool documentation</a> and/or instructions from your certificate authority.</p>
<pre>
&lt;signjar jar=&quot;${dist}/lib/ant.jar&quot;
alias=&quot;apache-group&quot; storepass=&quot;secret&quot;/&gt;</pre>


+ 2
- 2
manual/Tasks/sos.html View File

@@ -40,8 +40,8 @@

<p>These tasks provide an interface to
the <a href="https://msdn.microsoft.com/en-us/library/3h0544kx(v=vs.80).aspx"
target="_top">Microsoft Visual SourceSafe</a> SCM
via <a href="https://sourcegear.com">SourceGear's</a> <a href="https://sourcegear.com/sos/">SourceOffSite</a>
target="_top">Microsoft Visual SourceSafe</a> SCM via <a href="https://sourcegear.com"
target="_top">SourceGear's</a> <a href="https://sourcegear.com/sos/" target="_top">SourceOffSite</a>
product. SourceOffSite is an add-on to Microsoft's VSS, that allows remote development teams and
tele-commuters that need fast and secure read/write access to a centralized SourceSafe database via
any TCP/IP connection. SOS provides Linux, Solaris &amp; Windows


+ 2
- 2
manual/Tasks/sql.html View File

@@ -173,8 +173,8 @@ disabled with <code>-noproxy</code> option.</p>
<tr>
<td>escapeprocessing</td>
<td>Control whether the Java statement object will perform escape substitution.<br/>
See <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Statement.html#setEscapeProcessing-boolean-">Statement's
API docs</a> for details. <em>Since Ant 1.6</em>.
See <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Statement.html#setEscapeProcessing-boolean-"
target="_top">Statement's API docs</a> for details. <em>Since Ant 1.6</em>.
<td>No; defaults to <q>true</q></td>
</tr>
<tr>


+ 1
- 1
manual/Tasks/style.html View File

@@ -319,7 +319,7 @@ for primitive types).</p>

<h4>outputproperty (<var>trax</var> processors only)</h4>
<p>Used to specify how you wish the result tree to be output as specified in
the <a href="https://www.w3.org/TR/xslt#output"> XSLT specifications</a>.
the <a href="https://www.w3.org/TR/xslt#output" target="_top">XSLT specifications</a>.

<h5>Parameters</h5>
<table class="attr">


+ 2
- 2
manual/Tasks/tar.html View File

@@ -131,8 +131,8 @@ to <q>gzip</q>, <q>bzip2</q>, or <q>xz</q>.</p>
<td>encoding</td>
<td>The character encoding to use for filenames inside the tar file. For a list of possible
values see
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html">Supported
Encodings</a>.<br/><em>Since Ant 1.9.5</em>
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html"
target="_top">Supported Encodings</a>.<br/><em>Since Ant 1.9.5</em>
<td>No; defaults to default JVM character encoding</td>
</tr>
</table>


+ 1
- 1
manual/Tasks/touch.html View File

@@ -98,7 +98,7 @@ a <var>type</var> selector to suppress this. This only applies to filesets nest
directly, not to filesets nested into a path or any other resource collection.</p>

<h4>mapper</h4>
<p><em>Since Ant 1.6.3</em>, a nested <a href="../Types/mapper.html"> mapper</a> can be specified.
<p><em>Since Ant 1.6.3</em>, a nested <a href="../Types/mapper.html">mapper</a> can be specified.
Files specified via nested <code>fileset</code>s, <code>filelist</code>s, or the <code>file</code>
attribute are mapped using the specified mapper. For each file mapped, the resulting files are
touched. If no time has been specified and the original file exists its timestamp will be used. If


+ 9
- 10
manual/Tasks/tstamp.html View File

@@ -59,12 +59,11 @@ ignored.</p>
</table>

<h3>Parameters specified as nested elements</h3>
<p>The task supports a <code>&lt;format&gt;</code> nested element that allows a
property to be set to the current date and time in a given format. The date/time patterns are as
defined in the
Java <a href="https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html">SimpleDateFormat</a>
class. The format element also allows offsets to be applied to the time to generate different time
values.</p>
<p>The task supports a <code>&lt;format&gt;</code> nested element that allows a property to be set
to the current date and time in a given format. The date/time patterns are as defined in the
Java <a href="https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html"
target="_top">SimpleDateFormat</a> class. The format element also allows offsets to be applied to
the time to generate different time values.</p>
<table class="attr">
<tr>
<th>Attribute</th>
@@ -85,8 +84,8 @@ values.</p>
<tr>
<td>timezone</td>
<td>The timezone to use for displaying time. The values are as defined by the
Java <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TimeZone.html">TimeZone</a>
class.</td>
Java <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TimeZone.html"
target="_top">TimeZone</a> class.</td>
<td>No</td>
</tr>
<tr>
@@ -115,8 +114,8 @@ values.</p>
<td>The locale used to create date/time string. The general form is <q>language[, country[,
variant]]</q> (either <q>variant</q> or both <q>variant</q> and <q>country</q> may be
omitted). For more information please refer to documentation for
the <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html">Locale</a>
class.</td>
the <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html"
target="_top">Locale</a> class.</td>
<td>No</td>
</tr>
</table>


+ 8
- 7
manual/Tasks/typedef.html View File

@@ -45,17 +45,18 @@ attributes point to files in the format of Java property files or an xml format.
<p>If you are defining tasks or types that share the same classpath with
multiple <code>taskdef</code> or <code>typedef</code> tasks, the corresponding classes will be
loaded by different
Java <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html">ClassLoaders</a>.
Two classes with the same name loaded via different ClassLoaders are not the same class from the
point of view of JVM, they don't share static variables and instances of these classes can't access
private methods or attributes of instances defined by "the other class" of the same name. They
don't even belong to the same Java package and can't access package private code, either.</p>
Java <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html"
target="_top">ClassLoaders</a>. Two classes with the same name loaded via different ClassLoaders
are not the same class from the point of view of JVM, they don't share static variables and
instances of these classes can't access private methods or attributes of instances defined by "the
other class" of the same name. They don't even belong to the same Java package and can't access
package private code, either.</p>

<p>The best way to load several tasks/types that are supposed to cooperate with each other via
shared Java code is to use the <var>resource</var> attribute and an <code>antlib</code> descriptor.
If this is not possible, the second best option is to use the <var>loaderref</var> attribute and
specify the same name for each and every <code>typedef</code>/<code>taskdef</code> -- this way the
classes will share the same <code>ClassLoader</code>. Note that
specify the same name for each and every <code>typedef</code>/<code>taskdef</code>&mdash;this way
the classes will share the same <code>ClassLoader</code>. Note that
the <code>typedef</code>/<code>taskdef</code> tasks must use identical classpath definitions (this
includes the order of path components) for the <var>loaderref</var> attribute to work.</p>



+ 4
- 4
manual/Tasks/unzip.html View File

@@ -90,10 +90,10 @@ extract an Ant generated ZIP archive.</p>
<td>encoding</td>
<td>The character encoding that has been used for filenames inside the zip file. For a list of
possible values see
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html">Supported
Encodings</a>.<br/> Use the magic value <q>native-encoding</q> for default JVM character
encoding.<br/> See also the <a href="zip.html#encoding">discussion in the zip task
page</a></td>
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html"
target="_top">Supported Encodings</a>.<br/> Use the magic value <q>native-encoding</q> for
default JVM character encoding.<br/> See also the <a href="zip.html#encoding">discussion in
the zip task page</a></td>
<td>No; defaults to <q>UTF8</q> for <code>unzip</code> and default JVM character encoding
for <code>untar</code> task</td>
</tr>


+ 8
- 6
manual/Tasks/xmlvalidate.html View File

@@ -36,8 +36,9 @@ one can specify any SAX1/2 parser if needed.</p>
<li><code>&lt;dtd&gt;</code> elements which are used to resolve DTDs and entities</li>
<li><code>&lt;attribute&gt;</code> elements which are used to set features on the parser. These
can be any number
of <a href="http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html#package_description"><code>http://xml.org/sax/features/</code></a>
or other features that your parser may support.</li>
of <a href="http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html#package_description"
target="_top"><code>http://xml.org/sax/features/</code></a> or other features that your parser
may support.</li>
<li><code>&lt;property&gt;</code> elements, containing string properties</li>
</ul>

@@ -117,9 +118,10 @@ perform entity resolution.</p>
<h4>attribute</h4>
<p>The <code>&lt;attribute&gt;</code> element is used to set parser features.</p>
<p>Features usable with the Xerces parser are defined
here: <a href="https://xml.apache.org/xerces-j/features.html">Setting features</a></p>
here: <a href="https://xml.apache.org/xerces-j/features.html" target="_top">Setting features</a></p>
<p>SAX features are defined
here: <a href="http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html#package_description"><code>http://xml.org/sax/features/</code></a></p>
here: <a href="http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html#package_description"
target="_top"><code>http://xml.org/sax/features/</code></a></p>
<table class="attr">
<tr>
<th>Attribute</th>
@@ -141,8 +143,8 @@ here: <a href="http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html
<h4>property</h4>
<p>The <code>&lt;property&gt;</code> element is used to set properties. These properties are
defined here for the Xerces XML parser
implementation: <a href="https://xml.apache.org/xerces-j/properties.html">XML Parser properties</a>
Properties can be used to set the schema used to validate the XML file.</p>
implementation: <a href="https://xml.apache.org/xerces-j/properties.html" target="_top">XML Parser
properties</a>. Properties can be used to set the schema used to validate the XML file.</p>
<table class="attr">
<tr>
<th>Attribute</th>


+ 6
- 6
manual/Tasks/zip.html View File

@@ -81,10 +81,10 @@ see <a href="#encoding">below</a></p>
<p><em>Since Ant 1.5.2</em>, <code>&lt;zip&gt;</code> can store Unix permissions inside the archive
(see description of the <var>filemode</var> and <var>dirmode</var> attributes
for <a href="../Types/zipfileset.html">&lt;zipfileset&gt;</a>). Unfortunately there is no portable
way to store these permissions. Ant uses the algorithm used
by <a href="http://www.info-zip.org">Info-Zip's</a> implementation of the <code>zip</code>
and <code>unzip</code> commands&mdash;these are the default versions of <code>zip</code>
and <code>unzip</code> for many Unix(-like) systems.</p>
way to store these permissions. Ant uses the algorithm used by <a href="http://www.info-zip.org"
target="_top">Info-Zip's</a> implementation of the <code>zip</code> and <code>unzip</code>
commands&mdash;these are the default versions of <code>zip</code> and <code>unzip</code> for many
Unix(-like) systems.</p>

<p><strong>Please note that the zip format allows multiple files of the same fully-qualified name to
exist within a single archive. This has been documented as causing various problems for
@@ -143,8 +143,8 @@ extract an Ant generated ZIP archive.</p>
<td>encoding</td>
<td>The character encoding to use for filenames inside the zip file. For a list of possible
values see
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html">Supported
Encodings</a>.</td>
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html"
target="_top">Supported Encodings</a>.</td>
<td>No; defaults to default JVM character encoding</td>
</tr>
<tr>


+ 40
- 50
manual/Types/assertions.html View File

@@ -29,32 +29,31 @@
The <code>assertions</code> type enables or disables the Java 1.4 assertions feature, on a whole
Java program, or components of a program. It can be used
in <a href="../Tasks/java.html"><code>&lt;java&gt;</code></a>
and <a href="../Tasks/junit.html"><code>&lt;junit&gt;</code></a> to add extra validation to
code.
and <a href="../Tasks/junit.html"><code>&lt;junit&gt;</code></a> to add extra validation to code.

<p>
Assertions are covered in
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/language/assert.html">Java
SE documentation</a>, and
the <a href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.10">Java
Language Specification</a>.
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/language/assert.html"
target="_top">Java SE documentation</a>, and
the <a href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.10"
target="_top">Java Language Specification</a>.

<p>
The key points to note are that a <code>java.lang.AssertionError</code> is thrown when an
assertion fails, and that the facility is only available on Java 1.4 and later. To enable
assertions one must set <var>source</var>=<q>1.4</q> (or later) in <code>&lt;javac&gt;</code>
when the source is being compiled, and that the code must contain <code>assert</code> statements
to be tested. The result of such an action is code that neither compiles or runs on earlier
versions of Java. For this reason Apache Ant itself currently contains no assertions.
The key points to note are that a <code>java.lang.AssertionError</code> is thrown when an assertion
fails, and that the facility is only available on Java 1.4 and later. To enable assertions one must
set <var>source</var>=<q>1.4</q> (or later) in <code>&lt;javac&gt;</code> when the source is being
compiled, and that the code must contain <code>assert</code> statements to be tested. The result of
such an action is code that neither compiles or runs on earlier versions of Java. For this reason
Apache Ant itself currently contains no assertions.
<p>

When assertions are enabled (or disabled) in a task through nested assertions elements, the
class loader or command line is modified with the appropriate options. This means that the JVM
executed must be of version 1.4 or later, even if there are no assertions in the
code. Attempting to enable assertions on earlier JVMs will result in an "Unrecognized option"
error and the JVM will not start.

<p>
When assertions are enabled (or disabled) in a task through nested assertions elements, the class
loader or command line is modified with the appropriate options. This means that the JVM executed
must be of version 1.4 or later, even if there are no assertions in the code. Attempting to enable
assertions on earlier JVMs will result in an "Unrecognized option" error and the JVM will not start.
</p>

<h4>Attributes</h4>
<table class="attr">
<tr>
@@ -70,18 +69,19 @@ error and the JVM will not start.
</table>
<p>
When system assertions have been neither enabled nor disabled, then the JVM is not given any
assertion information&mdash;the default action of the current JVMs is to disable system
assertions.
assertion information&mdash;the default action of the current JVMs is to disable system assertions.
</p>
<p>
Note also that there is no apparent documentation for what parts of the JRE come with useful
assertions.
</p>

<h3>Nested elements</h3>

<h4>enable</h4>
<p>
Enable assertions in portions of code. If neither a package nor class is specified, assertions
are turned on in <em>all</em> (user) code.
Enable assertions in portions of code. If neither a package nor class is specified, assertions are
turned on in <em>all</em> (user) code.
</p>
<table class="attr">
<tr>
@@ -96,10 +96,8 @@ are turned on in <em>all</em> (user) code.
</tr>
<tr>
<td>package</td>
<td>
The name of a package in which to enable assertions on all classes. (Includes subpackages.)
Use <q>...</q> for the anonymous package.
</td>
<td>The name of a package in which to enable assertions on all classes. (Includes subpackages.)
Use <q>...</q> for the anonymous package.</td>
<td>No</td>
</tr>
</table>
@@ -121,10 +119,8 @@ Disable assertions in portions of code.
</tr>
<tr>
<td>package</td>
<td>
The name of a package in which to disable assertions on all classes. (Includes subpackages.)
Use <q>...</q> for the anonymous package.
</td>
<td>The name of a package in which to disable assertions on all classes. (Includes subpackages.)
Use <q>...</q> for the anonymous package.</td>
<td>No</td>
</tr>
</table>
@@ -136,63 +132,57 @@ have been enabled in a parent package.

<h5>Example: enable assertions in all user classes</h5>

All classes not in the JRE (i.e. all non-system classes) will have assertions turned on.
<p>All classes not in the JRE (i.e. all non-system classes) will have assertions turned on.</p>
<pre>
&lt;assertions&gt;
&lt;enable/&gt;
&lt;/assertions&gt;
</pre>
&lt;/assertions&gt;</pre>

<h5>Example: enable a single class</h5>

Enable assertions in a class called Test
<p>Enable assertions in a class called Test</p>
<pre>
&lt;assertions&gt;
&lt;enable class="Test"/&gt;
&lt;/assertions&gt;
</pre>
&lt;/assertions&gt;</pre>

<h5>Example: enable a package</h5>

Enable assertions in the <code>org.apache</code> package and all packages starting with
the <code>org.apache.</code> prefix
<p>Enable assertions in the <code>org.apache</code> package and all packages starting with
the <code>org.apache.</code> prefix</p>
<pre>
&lt;assertions&gt;
&lt;enable package="org.apache"/&gt;
&lt;/assertions&gt;
</pre>
&lt;/assertions&gt;</pre>

<h5>Example: System assertions</h5>

Enable system assertions and assertions in all <code>org.apache</code> packages except for Ant
(but including <code>org.apache.tools.ant.Main</code>)
<p>Enable system assertions and assertions in all <code>org.apache</code> packages except for Ant
(but including <code>org.apache.tools.ant.Main</code>)</p>
<pre>
&lt;assertions enableSystemAssertions="true"&gt;
&lt;enable package="org.apache"/&gt;
&lt;disable package="org.apache.tools.ant"/&gt;
&lt;enable class="org.apache.tools.ant.Main"/&gt;
&lt;/assertions&gt;
</pre>
&lt;/assertions&gt;</pre>

<h5>Example: disabled and anonymous package assertions</h5>

Disable system assertions; enable those in the anonymous package
<p>Disable system assertions; enable those in the anonymous package</p>
<pre>
&lt;assertions enableSystemAssertions="false"&gt;
&lt;enable package="..."/&gt;
&lt;/assertions&gt;
</pre>
&lt;/assertions&gt;</pre>

<h5>Example: referenced assertions</h5>

This type is a datatype, so you can declare assertions and use them later
<p>This type is a datatype, so you can declare assertions and use them later</p>
<pre>
&lt;assertions id="project.assertions"&gt;
&lt;enable package="org.apache.test"/&gt;
&lt;/assertions&gt;

&lt;assertions refid="project.assertions"/&gt;
</pre>
&lt;assertions refid="project.assertions"/&gt;</pre>

</body>
</html>

+ 9
- 9
manual/Types/extension.html View File

@@ -23,15 +23,15 @@

<body>
<h2 id="fileset">Extension</h2>
<p>Utility type that represents either an available "Optional Package" (formerly known as
"Standard Extension") as described in the manifest of a JAR file, or the requirement for such
an optional package.</p>
<p>Utility type that represents either an available "Optional Package" (formerly known as "Standard
Extension") as described in the manifest of a JAR file, or the requirement for such an optional
package.</p>
<p>Note that this type works with extensions as defined by the "Optional Package" specification.
For more information about optional packages, see the document <em>Optional Package
Versioning</em> in the documentation bundle for your Java Standard Edition package, in
For more information about optional packages, see the document <em>Optional Package Versioning</em>
in the documentation bundle for your Java Standard Edition package, in
file <samp>guide/extensions/versioning.html</samp> or the
online <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html#wp90779">Package
Versioning documentation.</a></p>
online <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html#wp90779"
target="_top">Package Versioning documentation.</a></p>

<h3>Attributes</h3>
<p>The extension type supports the following attributes:</p>
@@ -50,7 +50,7 @@ Versioning documentation.</a></p>
<tr>
<td>specificationVersion</td>
<td>The version of extension specification (must be in dewey decimal aka dotted decimal
notation, eg <q>3.2.4</q>)</td>
notation, eg <q>3.2.4</q>)</td>
<td>no</td>
</tr>
<tr>
@@ -61,7 +61,7 @@ Versioning documentation.</a></p>
<tr>
<td>implementationVersion</td>
<td>The version of extension implementation (must be in dewey decimal aka dotted decimal
notation, eg <q>3.2.4</q>)</td>
notation, eg <q>3.2.4</q>)</td>
<td>no</td>
</tr>
<tr>


+ 8
- 9
manual/Types/extensionset.html View File

@@ -25,11 +25,11 @@
<h2><a>ExtensionSet</a></h2>
<p>Utility type that represents a set of Extensions.</p>
<p>Note that this type works with extensions as defined by the "Optional Package" specification.
For more information about optional packages, see the document <em>Optional Package
Versioning</em> in the documentation bundle for your Java Standard Edition package, in
For more information about optional packages, see the document <em>Optional Package Versioning</em>
in the documentation bundle for your Java Standard Edition package, in
file <samp>guide/extensions/versioning.html</samp> or online
at <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html#wp90779">Package
Versioning documentation.</a></p>
at <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html#wp90779"
target="_top">Package Versioning documentation.</a></p>

<h3>Nested elements</h3>

@@ -37,13 +37,12 @@ Versioning documentation.</a></p>
<p><a href="extension.html">Extension</a> object to add to set.</p>

<h4>fileset</h4>
<p><a href="fileset.html">FileSet</a>s all files contained contained within set that are jars
and implement an extension are added to extension set.</p>
<p><a href="fileset.html">FileSet</a>s all files contained contained within set that are jars and
implement an extension are added to extension set.</p>

<h4>libfileset</h4>
<p>All files contained contained within set that are jars and implement an extension are added
to extension set. However, the extension information may be modified by attributes of
libfileset.</p>
<p>All files contained contained within set that are jars and implement an extension are added to
extension set. However, the extension information may be modified by attributes of libfileset.</p>

<h4>Examples</h4>
<pre>


+ 48
- 51
manual/Types/filterchain.html View File

@@ -28,22 +28,22 @@ that contained the string <q>blee</q> from the first 10 lines of a text file <sa
(<em>you wouldn't want to filter a binary file</em>) to a file <samp>bar</samp>, you would do
something like:</p>
<pre>cat foo|head -n10|grep blee &gt; bar</pre>
<p>Apache Ant was not flexible enough. There was no way for the <code>&lt;copy&gt;</code> task
to do something similar. If you wanted the <code>&lt;copy&gt;</code> task to get the first 10
lines, you would have had to create special attributes:</p>
<p>Apache Ant was not flexible enough. There was no way for the <code>&lt;copy&gt;</code> task to
do something similar. If you wanted the <code>&lt;copy&gt;</code> task to get the first 10 lines,
you would have had to create special attributes:</p>
<pre>&lt;copy file=&quot;foo&quot; tofile=&quot;bar&quot; head=&quot;10&quot; contains=&quot;blee&quot;/&gt;</pre>
<p>The obvious problem thus surfaced: Ant tasks would not be able to accommodate such data
transformation attributes as they would be endless. The task would also not know in which order
these attributes were to be interpreted. That is, must the task execute the contains attribute
first and then the head attribute or vice-versa? What Ant tasks needed was a mechanism to allow
pluggable filter (data transformer) chains. Ant would provide a few filters for which there
have been repeated requests. Users with special filtering needs would be able to easily write
their own and plug them in.</p>
pluggable filter (data transformer) chains. Ant would provide a few filters for which there have
been repeated requests. Users with special filtering needs would be able to easily write their own
and plug them in.</p>

<p>The solution was to refactor data transformation oriented tasks to support FilterChains. A
FilterChain is a group of ordered FilterReaders. Users can define their own FilterReaders by
just extending the <code>java.io.FilterReader</code> class. Such custom FilterReaders can be
easily plugged in as nested elements of <code>&lt;filterchain&gt;</code> by
FilterChain is a group of ordered FilterReaders. Users can define their own FilterReaders by just
extending the <code>java.io.FilterReader</code> class. Such custom FilterReaders can be easily
plugged in as nested elements of <code>&lt;filterchain&gt;</code> by
using <code>&lt;filterreader&gt;</code> elements.</p>
<p>Example:</p>
<pre>
@@ -114,14 +114,13 @@ also.</p>

<h3 id="filterreader">FilterReader</h3>

<p>The <code>filterreader</code> element is the generic way to define a filter. User defined
filter elements are defined in the build file using this. Please note that built in filter
readers can also be defined using this syntax.</p>
<p>The <code>filterreader</code> element is the generic way to define a filter. User defined filter
elements are defined in the build file using this. Please note that built in filter readers can
also be defined using this syntax.</p>

<p>A FilterReader element must be supplied with a class name as an attribute value. The class
resolved by this name must extend <code>java.io.FilterReader</code>. If the custom filter
reader needs to be parameterized, it must
implement <code>org.apache.tools.type.Parameterizable</code>.</p>
resolved by this name must extend <code>java.io.FilterReader</code>. If the custom filter reader
needs to be parameterized, it must implement <code>org.apache.tools.type.Parameterizable</code>.</p>

<table class="attr">
<tr>
@@ -138,23 +137,22 @@ implement <code>org.apache.tools.type.Parameterizable</code>.</p>

<h4>Nested elements</h4>
<p><code>&lt;filterreader&gt;</code> supports <code>&lt;classpath&gt;</code>
and <code>&lt;param&gt;</code> as nested elements. Each <code>&lt;param&gt;</code> element may
take in the following attributes&mdash;<var>name</var>, <var>type</var> and <var>value</var>.</p>
and <code>&lt;param&gt;</code> as nested elements. Each <code>&lt;param&gt;</code> element may take
in the following attributes&mdash;<var>name</var>, <var>type</var> and <var>value</var>.</p>
<p>The following FilterReaders are supplied with the default distribution.</p>

<h3 id="classconstants">ClassConstants</h3>
<p>This filters basic constants defined in a Java Class, and outputs them in lines composed of
the format <em>name</em>=<em>value</em>. This filter uses the BCEL library to understand the
Java Class file. See <a href="../install.html#librarydependencies">Library Dependencies</a>.</p>
<p><strong>Important</strong>: This filter is different from most of the other filters. Most of
the filters operate on a sequence of characters. This filter operates on the sequence of bytes
that makes up a class. However the bytes arrive to the filter as a sequence of characters. This
means that one must be careful on the choice of character encoding to use. Most encodings lose
information on conversion from an arbitrary sequence of bytes to characters and back again to
bytes. In particular, the usual default character encodings (CP1252 and UTF-8) do. For this
reason, <em>since Ant 1.7</em>, the character encoding <strong>ISO-8859-1</strong> is used to
convert from characters back to bytes, so one <strong>has</strong> to use this encoding for
reading the java class file.</p>
<p>This filters basic constants defined in a Java Class, and outputs them in lines composed of the
format <em>name</em>=<em>value</em>. This filter uses the BCEL library to understand the Java Class
file. See <a href="../install.html#librarydependencies">Library Dependencies</a>.</p>
<p><strong>Important</strong>: This filter is different from most of the other filters. Most of the
filters operate on a sequence of characters. This filter operates on the sequence of bytes that
makes up a class. However the bytes arrive to the filter as a sequence of characters. This means
that one must be careful on the choice of character encoding to use. Most encodings lose information
on conversion from an arbitrary sequence of bytes to characters and back again to bytes. In
particular, the usual default character encodings (CP1252 and UTF-8) do. For this reason, <em>since
Ant 1.7</em>, the character encoding <strong>ISO-8859-1</strong> is used to convert from characters
back to bytes, so one <strong>has</strong> to use this encoding for reading the Java class file.</p>
<h4>Example</h4>

<p>This loads the basic constants defined in a Java class as Ant properties.</p>
@@ -203,8 +201,8 @@ Unicode escape backslash u plus 4 digits.</p>
&lt;/loadproperties&gt;</pre>

<h3 id="expandproperties">ExpandProperties</h3>
<p>If the data contains data that represents Ant properties (of the form <code>${...}</code>),
that is substituted with the property's actual value.</p>
<p>If the data contains data that represents Ant properties (of the form <code>${...}</code>), that
is substituted with the property's actual value.</p>

<h4>Example</h4>

@@ -663,8 +661,8 @@ them.</p>

<h3 id="striplinecomments">StripLineComments</h3>

<p>This filter removes all those lines that begin with strings that represent comments as
specified by the user.</p>
<p>This filter removes all those lines that begin with strings that represent comments as specified
by the user.</p>

<table class="attr">
<tr>
@@ -764,8 +762,8 @@ and <q>//</q></p>
<p>

<h4>Background</h4>
<p>With HeadFilter and TailFilter you can extract each part of a text file you want. This
graphic shows the dependencies:</p>
<p>With HeadFilter and TailFilter you can extract each part of a text file you want. This graphic
shows the dependencies:</p>

<table>
<tr>
@@ -1120,15 +1118,14 @@ following are understood: <q>\n</q>, <q>\r</q>, <q>\f</q>, <q>\t</q> and <q>\\</
</p>
<p>
Some of the filters may be used directly within a <code>filterchain</code>. In this case
a <code>tokenfilter</code> is created implicitly. An extra attribute <var>byline</var> is added
to the filter to specify whether to use a <code>linetokenizer</code>
(<var>byline</var>=<q>true</q>) or a <code>filetokenizer</code>
(<var>byline</var>=<q>false</q>). The default is <q>true</q>.
a <code>tokenfilter</code> is created implicitly. An extra attribute <var>byline</var> is added to
the filter to specify whether to use a <code>linetokenizer</code> (<var>byline</var>=<q>true</q>) or
a <code>filetokenizer</code> (<var>byline</var>=<q>false</q>). The default is <q>true</q>.
</p>

<h4 id="linetokenizer">LineTokenizer</h4>
<p>This tokenizer splits the input into lines. The tokenizer delimits lines
by <q>\r</q>, <q>\n</q> or <q>\r\n</q>. This is the default tokenizer.</p>
<p>This tokenizer splits the input into lines. The tokenizer delimits lines by <q>\r</q>, <q>\n</q>
or <q>\r\n</q>. This is the default tokenizer.</p>
<table class="attr">
<tr>
<th>Attribute</th>
@@ -1451,8 +1448,8 @@ the <a href="../Tasks/native2ascii.html">native2ascii</a> task.</p>
<p>
This is an optional filter that executes a script in a <a href="https://jakarta.apache.org/bsf"
target="_top">Apache BSF</a>
or <a href="https://jcp.org/aboutJava/communityprocess/maintenance/jsr223/223ChangeLog.html">JSR
223</a> supported language.
or <a href="https://jcp.org/aboutJava/communityprocess/maintenance/jsr223/223ChangeLog.html"
target="_top">JSR 223</a> supported language.
</p>
<p>
See the <a href="../Tasks/script.html">Script</a> task for an explanation of scripts and
@@ -1460,8 +1457,8 @@ dependencies.
</p>
<p>
The script is provided with an object <samp>self</samp> that has <code>getToken()</code>
and <code>setToken(String)</code> methods. The <code>getToken()</code> method returns the
current token. The <code>setToken(String)</code> method replaces the current token.
and <code>setToken(String)</code> methods. The <code>getToken()</code> method returns the current
token. The <code>setToken(String)</code> method replaces the current token.
</p>
<p>
This filter may be used directly within a <code>filterchain</code>.
@@ -1474,14 +1471,14 @@ This filter may be used directly within a <code>filterchain</code>.
</tr>
<tr>
<td>language</td>
<td>Programming language the script is written in. Must be a supported Apache BSF or
JSR 223 language</td>
<td>Programming language the script is written in. Must be a supported Apache BSF or JSR 223
language</td>
<td>Yes</td>
</tr>
<tr>
<td>manager</td>
<td>Script engine manager to use. See the <a href="../Tasks/script.html">script</a>
task for using this attribute.</td>
<td>Script engine manager to use. See the <a href="../Tasks/script.html">script</a> task for
using this attribute.</td>
<td>No; default is <q>auto</q></td>
</tr>
<tr>
@@ -1507,8 +1504,8 @@ This filter may be used directly within a <code>filterchain</code>.
</tr>
<tr>
<td>classpathref</td>
<td>The classpath to use, given as a <a href="../using.html#references">reference</a> to a
path defined elsewhere.
<td>The classpath to use, given as a <a href="../using.html#references">reference</a> to a path
defined elsewhere.
<td>No</td>
</tr>
</table>


+ 81
- 85
manual/Types/mapper.html View File

@@ -26,16 +26,15 @@

<h2 id="mapper">Mapping File Names</h2>
<p>Some tasks take source files and create target files. Depending on the task, it may be quite
obvious which name a target file will have (using <a href="../Tasks/javac.html">javac</a>, you
know there will be <samp>.class</samp> files for your <samp>.java</samp> files)&mdash;in other
cases you may want to specify the target files, either to help Apache Ant or to get an extra bit
of functionality.</p>
obvious which name a target file will have (using <a href="../Tasks/javac.html">javac</a>, you know
there will be <samp>.class</samp> files for your <samp>.java</samp> files)&mdash;in other cases you
may want to specify the target files, either to help Apache Ant or to get an extra bit of
functionality.</p>
<p>While source files are usually specified as <a href="fileset.html">fileset</a>s, you don't
specify target files directly&mdash;instead, you tell Ant how to find the target file(s) for one
source file. An instance of <code>org.apache.tools.ant.util.FileNameMapper</code> is responsible
for this. It constructs target file names based on rules that can be parameterized
with <var>from</var> and <var>to</var> attributes&mdash;the exact meaning of which is
implementation-dependent.</p>
source file. An instance of <code>org.apache.tools.ant.util.FileNameMapper</code> is responsible for
this. It constructs target file names based on rules that can be parameterized with <var>from</var>
and <var>to</var> attributes&mdash;the exact meaning of which is implementation-dependent.</p>
<p>These instances are defined in <code>&lt;mapper&gt;</code> elements with the following
attributes:</p>
<table class="attr">
@@ -76,37 +75,37 @@ attributes:</p>
<td>Depends on implementation</td>
</tr>
</table>
<p>Note that Ant will not automatically convert <q>/</q> or <q>\</q> characters in
the <var>to</var> and <var>from</var> attributes to the correct directory separator of your
current platform. If you need to specify this separator, use <code>${file.separator}</code>
instead. For the regexp mapper, <code>${file.separator}</code> will not work, as on Windows it
is the <q>\</q> character, and this is an escape character for regular expressions, one should
use the <code>handledirsep</code> attribute instead.
<p>Note that Ant will not automatically convert <q>/</q> or <q>\</q> characters in the <var>to</var>
and <var>from</var> attributes to the correct directory separator of your current platform. If you
need to specify this separator, use <code>${file.separator}</code> instead. For the regexp
mapper, <code>${file.separator}</code> will not work, as on Windows it is the <q>\</q> character,
and this is an escape character for regular expressions, one should use
the <code>handledirsep</code> attribute instead.
</p>
<h3>Parameters specified as nested elements</h3>
<p>The classpath can be specified via a nested <code>&lt;classpath&gt;</code>, as
well&mdash;that is, a <a href="../using.html#path">path</a>-like structure.</p>
<p>The classpath can be specified via a nested <code>&lt;classpath&gt;</code>, as well&mdash;that
is, a <a href="../using.html#path">path</a>-like structure.</p>
<p><em>Since Ant 1.7.0</em>, nested File Mappers can be supplied via
either <code>&lt;mapper&gt;</code> elements
or <a href="../Tasks/typedef.html"><code>&lt;typedef&gt;</code></a>'d implementations
of <code>org.apache.tools.ant.util.FileNameMapper</code>. If nested File Mappers are specified
by either means, the mapper will be implicitly configured as
a <a href="#composite-mapper">composite mapper</a>.</p>
of <code>org.apache.tools.ant.util.FileNameMapper</code>. If nested File Mappers are specified by
either means, the mapper will be implicitly configured as a <a href="#composite-mapper">composite
mapper</a>.</p>
<h3>The built-in mapper types</h3>
<p>All built-in mappers are case-sensitive.</p>
<p><em>Since Ant 1.7.0</em>, each of the built-in mapper implementation types is directly
accessible using a specific tagname. This makes it possible for filename mappers to support
attributes in addition to the generally available <var>to</var> and <var>from</var>.<br/>
The <code>&lt;mapper type|classname=&quot;...&quot;&gt;</code> usage form remains valid for
reasons of backward compatibility.</p>
<p><em>Since Ant 1.7.0</em>, each of the built-in mapper implementation types is directly accessible
using a specific tagname. This makes it possible for filename mappers to support attributes in
addition to the generally available <var>to</var> and <var>from</var>.<br/> The <code>&lt;mapper
type|classname=&quot;...&quot;&gt;</code> usage form remains valid for reasons of backward
compatibility.</p>

<!-- -->
<!-- Identity Mapper -->
<!-- -->

<h4 id="identity-mapper">identity</h4>
<p>The target file name is identical to the source file name. Both <var>to</var>
and <var>from</var> will be ignored.</p>
<p>The target file name is identical to the source file name. Both <var>to</var> and <var>from</var>
will be ignored.</p>
<h5>Examples</h5>
<pre>
&lt;mapper type=&quot;identity&quot;/&gt;
@@ -139,8 +138,8 @@ and <var>from</var> will be ignored.</p>
<!-- -->

<h4 id="flatten-mapper">flatten</h4>
<p>The target file name is identical to the source file name, with all leading directory
information stripped off. Both <var>to</var> and <var>from</var> will be ignored.</p>
<p>The target file name is identical to the source file name, with all leading directory information
stripped off. Both <var>to</var> and <var>from</var> will be ignored.</p>
<h5>Examples</h5>
<pre>
&lt;mapper type=&quot;flatten&quot;/&gt;
@@ -173,8 +172,8 @@ information stripped off. Both <var>to</var> and <var>from</var> will be ignored
<!-- -->

<h4 id="merge-mapper">merge</h4>
<p>The target file name will always be the same, as defined
by <var>to</var>&mdash;<var>from</var> will be ignored.</p>
<p>The target file name will always be the same, as defined by <var>to</var>&mdash;<var>from</var>
will be ignored.</p>
<h5>Examples</h5>
<pre>
&lt;mapper type=&quot;merge&quot; to=&quot;archive.tar&quot;/&gt;
@@ -207,11 +206,11 @@ by <var>to</var>&mdash;<var>from</var> will be ignored.</p>
<!-- -->

<h4 id="glob-mapper">glob</h4>
<p>Both <var>to</var> and <var>from</var> are required and define patterns that may contain at
most one <q>*</q>. For each source file that matches the <var>from</var> pattern, a target file
name will be constructed from the <var>to</var> pattern by substituting the <q>*</q> in
the <var>to</var> pattern with the text that matches the <q>*</q> in the <var>from</var>
pattern. Source file names that don't match the <var>from</var> pattern will be ignored.</p>
<p>Both <var>to</var> and <var>from</var> are required and define patterns that may contain at most
one <q>*</q>. For each source file that matches the <var>from</var> pattern, a target file name will
be constructed from the <var>to</var> pattern by substituting the <q>*</q> in the <var>to</var>
pattern with the text that matches the <q>*</q> in the <var>from</var> pattern. Source file names
that don't match the <var>from</var> pattern will be ignored.</p>
<h5>Examples</h5>
<pre>
&lt;mapper type=&quot;glob&quot; from=&quot;*.java&quot; to=&quot;*.java.bak&quot;/&gt;
@@ -273,9 +272,8 @@ pattern. Source file names that don't match the <var>from</var> pattern will be
<tr>
<td>casesensitive</td>
<td>
This attribute can be <q>true</q> or <q>false</q>. If this is <q>false</q>, the mapper
will ignore case when matching the glob pattern.
<em>Since Ant 1.6.3</em>
This attribute can be <q>true</q> or <q>false</q>. If this is <q>false</q>, the mapper will
ignore case when matching the glob pattern. <em>Since Ant 1.6.3</em>
</td>
<td>No; default is <q>true</q></td>
</tr>
@@ -284,8 +282,8 @@ pattern. Source file names that don't match the <var>from</var> pattern will be
<td>
This attribute can be <q>true</q> or <q>false</q>. If this is specified, the mapper will
ignore the difference between the normal directory separator characters&mdash;<q>\</q>
and <q>/</q>. This attribute is useful for cross-platform build files.
<em>Since Ant 1.6.3</em>
and <q>/</q>. This attribute is useful for cross-platform build files. <em>Since Ant
1.6.3</em>
<td>No; default is <q>false</q></td>
</tr>
</table>
@@ -318,14 +316,14 @@ pattern. Source file names that don't match the <var>from</var> pattern will be

<h4 id="regexp-mapper">regexp</h4>

<p>Both <var>to</var> and <var>from</var> are required and define regular expressions. If the
source file name (as a whole or in part) matches the <var>from</var> pattern, the target file
name will be constructed from the <var>to</var> pattern, using <code>\0</code>
to <code>\9</code> as back-references for the full match (<code>\0</code>) or the matches of the
subexpressions in parentheses. The <var>to</var> pattern determines the <strong>whole</strong>
file name, so if you wanted to replace the extension of a file you should not
use <code>from="\.old$" to=".new"</code> but rather <code>from="(.*)\.old$" to="\1.new"</code>
(or rather use a glob mapper in this case).</p>
<p>Both <var>to</var> and <var>from</var> are required and define regular expressions. If the source
file name (as a whole or in part) matches the <var>from</var> pattern, the target file name will be
constructed from the <var>to</var> pattern, using <code>\0</code> to <code>\9</code> as
back-references for the full match (<code>\0</code>) or the matches of the subexpressions in
parentheses. The <var>to</var> pattern determines the <strong>whole</strong> file name, so if you
wanted to replace the extension of a file you should not use <code>from="\.old$" to=".new"</code>
but rather <code>from="(.*)\.old$" to="\1.new"</code> (or rather use a glob mapper in this
case).</p>

<p>Source files not matching the <var>from</var> pattern will be ignored.</p>

@@ -334,30 +332,29 @@ use <code>from="\.old$" to=".new"</code> but rather <code>from="(.*)\.old$" to="
<p>The regexp mapper needs a supporting library and an implementation
of <code>org.apache.tools.ant.util.regexp.RegexpMatcher</code> that hides the specifics of the
library. <em>Since Ant 1.8.0</em>, Java 1.4 or later is required, so the implementation based on
the <code>java.util.regex</code> package is always be available. You can still use the now
retired Jakarta ORO or Jakarta Regex instead if your provide the corresponding jar in
the <code>java.util.regex</code> package is always be available. You can still use the now retired
Jakarta ORO or Jakarta Regex instead if your provide the corresponding jar in
your <code>CLASSPATH</code>.</p>

<p>For information about using <a href="https://savannah.gnu.org/projects/gnu-regexp/"
target="_top">gnu.regexp</a> or <a href="https://github.com/kzn/regex4j/"
target="_top">gnu.rex</a> with Ant,
see <a href="https://marc.info/?l=ant-dev&m=97550753813481&w=2" target="_top">this</a>
article. Please keep in mind that <a href="http://tusker.org/regex/regex_benchmark.html">your
mileage may vary</a> with different regexp engines.</p>

<p>If you want to use one of the <a href="../install.html#librarydependencies">regular
expression libraries</a> other than <code>java.util.regex</code> you need to also use the
corresponding <code>ant-[apache-oro, apache-regexp].jar</code> from the Ant release you are
using. Make sure that both will be loaded from the same classpath, that is either put them into
target="_top">gnu.regexp</a> or <a href="https://github.com/kzn/regex4j/" target="_top">gnu.rex</a>
with Ant, see <a href="https://marc.info/?l=ant-dev&m=97550753813481&w=2" target="_top">this</a>
article. Please keep in mind that <a href="http://tusker.org/regex/regex_benchmark.html"
target="_top">your mileage may vary</a> with different regexp engines.</p>

<p>If you want to use one of the <a href="../install.html#librarydependencies">regular expression
libraries</a> other than <code>java.util.regex</code> you need to also use the
corresponding <code>ant-[apache-oro, apache-regexp].jar</code> from the Ant release you are using.
Make sure that both will be loaded from the same classpath, that is either put them into
your <code>CLASSPATH</code>, <samp>ANT_HOME/lib</samp> directory or a
nested <code>&lt;classpath&gt;</code> element of the mapper&mdash;you cannot
have <code>ant-[apache-oro, apache-regexp].jar</code> in <samp>ANT_HOME/lib</samp> and the
library in a nested <code>&lt;classpath&gt;</code>.</p>
have <code>ant-[apache-oro, apache-regexp].jar</code> in <samp>ANT_HOME/lib</samp> and the library
in a nested <code>&lt;classpath&gt;</code>.</p>
<p>Ant will choose the regular expression library based on the following algorithm:</p>
<ul>
<li>If the system property <code>ant.regexp.matcherimpl</code> has been set, it is taken as the
name of the class implementing <code>org.apache.tools.ant.util.regexp.RegexpMatcher</code> that
should be used.</li>
<li>If the system property <code>ant.regexp.matcherimpl</code> has been set, it is taken as the name
of the class implementing <code>org.apache.tools.ant.util.regexp.RegexpMatcher</code> that should be
used.</li>
<li>If it has not been set, uses the JDK 1.4 classes.</li>
</ul>

@@ -472,8 +469,8 @@ should be used.</li>
<tr>
<td>casesensitive</td>
<td>
This attribute can be <q>true</q> or <q>false</q>. If this is <q>false</q>, the mapper
will ignore case when matching the pattern.
This attribute can be <q>true</q> or <q>false</q>. If this is <q>false</q>, the mapper will
ignore case when matching the pattern.
<em>Since Ant 1.6.3</em>
</td>
<td>No; default is <q>true</q></td>
@@ -514,9 +511,9 @@ should be used.</li>

<h4 id="package-mapper">package</h4>
<p>Sharing the same syntax as the <a href="#glob-mapper">glob mapper</a>, the package mapper
replaces directory separators found in the matched source pattern with dots in the target
pattern placeholder. This mapper is particularly useful in combination
with <code>&lt;uptodate&gt;</code> and <code>&lt;junit&gt;</code> output.</p>
replaces directory separators found in the matched source pattern with dots in the target pattern
placeholder. This mapper is particularly useful in combination with <code>&lt;uptodate&gt;</code>
and <code>&lt;junit&gt;</code> output.</p>
<p>The <var>to</var> and <var>from</var> attributes are both required.</p>
<h5>Example</h5>
<pre>
@@ -543,9 +540,9 @@ with <code>&lt;uptodate&gt;</code> and <code>&lt;junit&gt;</code> output.</p>

<h4 id="unpackage-mapper">unpackage</h4>
<p><em>Since Ant 1.6.0</em></p>
<p>This mapper is the inverse of the <a href="#package-mapper">package</a> mapper. It replaces
the dots in a package name with directory separators. This is useful for matching XML formatter
results against their JUnit test test cases. The mapper shares the sample syntax as
<p>This mapper is the inverse of the <a href="#package-mapper">package</a> mapper. It replaces the
dots in a package name with directory separators. This is useful for matching XML formatter results
against their JUnit test test cases. The mapper shares the sample syntax as
the <a href="#glob-mapper">glob mapper</a>.</p>
<p>The <var>to</var> and <var>from</var> attributes are both required.</p>
<h5>Example</h5>
@@ -572,8 +569,8 @@ the <a href="#glob-mapper">glob mapper</a>.</p>
<p>This mapper implementation can contain multiple nested mappers. File mapping is performed by
passing the source filename to each nested <code>&lt;mapper&gt;</code> in turn, returning all
results. The <var>to</var> and <var>from</var> attributes are ignored.</p>
<p><em>Since Ant 1.8.0</em>, the order of the mapped results is the same as the order of the
nested mappers; prior to Ant 1.8.0 the order has been undefined.</p>
<p><em>Since Ant 1.8.0</em>, the order of the mapped results is the same as the order of the nested
mappers; prior to Ant 1.8.0 the order has been undefined.</p>
<h5>Examples</h5>
<pre>
&lt;compositemapper&gt;
@@ -603,9 +600,9 @@ attribute.</p>
<h4 id="chained-mapper">chained</h4>
<p><em>Since Ant 1.7.0</em></p>
<p>This mapper implementation can contain multiple nested mappers. File mapping is performed by
passing the source filename to the first nested mapper, its results to the second, and so on.
The target filenames generated by the last nested mapper comprise the ultimate results of the
mapping operation. The <var>to</var> and <var>from</var> attributes are ignored.</p>
passing the source filename to the first nested mapper, its results to the second, and so on. The
target filenames generated by the last nested mapper comprise the ultimate results of the mapping
operation. The <var>to</var> and <var>from</var> attributes are ignored.</p>
<h5>Examples</h5>
<pre>
&lt;chainedmapper&gt;
@@ -693,8 +690,8 @@ file name.</p>
<p><em>Since Ant 1.7</em></p>
<p>This mapper executes a script written in <a href="https://jakarta.apache.org/bsf"
target="_top">Apache BSF</a>
or <a href="https://jcp.org/aboutJava/communityprocess/maintenance/jsr223/223ChangeLog.html">JSR
223</a> supported language, once per file to map.</p>
or <a href="https://jcp.org/aboutJava/communityprocess/maintenance/jsr223/223ChangeLog.html"
target="_top">JSR 223</a> supported language, once per file to map.</p>
<p>The script can be declared inline or in a specified file.</p>
<p>See the <a href="../Tasks/script.html">Script</a> task for an explanation of scripts and
dependencies.</p>
@@ -800,9 +797,9 @@ every source file, with the list of mapped names reset after every invocation.</

<h4 id="firstmatch-mapper">firstmatchmapper</h4>
<p><em>Since Ant 1.8.0</em></p>
<p>This mapper supports an arbitrary number of nested mappers and returns the results of the
first mapper that matches. This is different from <a href="#composite-mapper">composite
mapper</a> which collects the results of all matching children.</p>
<p>This mapper supports an arbitrary number of nested mappers and returns the results of the first
mapper that matches. This is different from <a href="#composite-mapper">composite mapper</a> which
collects the results of all matching children.</p>
<h5>Examples</h5>
<pre>
&lt;firstmatchmapper&gt;
@@ -846,8 +843,7 @@ attribute.</p>
</tr>
</table>

<p>The cutdirsmapper has no corresponding <code>&lt;mapper <var>type</var>&gt;</code>
attribute.</p>
<p>The cutdirsmapper has no corresponding <code>&lt;mapper <var>type</var>&gt;</code> attribute.</p>

<table class="attr">
<tr>


+ 13
- 24
manual/Types/regexp.html View File

@@ -43,25 +43,18 @@ Regexp represents a regular expression.

<h3>Examples</h3>
<pre>&lt;regexp id="myregexp" pattern="alpha(.+)beta"/&gt;</pre>
<p>
Defines a regular expression for later use with <var>id</var> <q>myregexp</q>.
</p>
<p>Defines a regular expression for later use with <var>id</var> <q>myregexp</q>.</p>
<pre>&lt;regexp refid="myregexp"/&gt;</pre>
<p>
Use the regular expression with <var>id</var> <q>myregexp</q>.
</p>
<p>Use the regular expression with <var>id</var> <q>myregexp</q>.</p>
<h3 id="implementation">Choice of regular expression implementation</h3>
<p>
Apache Ant comes with wrappers for
<p>Apache Ant comes with wrappers for
the <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html"
target="_top">java.util.regex
package</a>, <a href="https://attic.apache.org/projects/jakarta-regexp.html"
target="_top">jakarta-regexp</a>
and <a href="https://attic.apache.org/projects/jakarta-oro.html" target="_top">jakarta-ORO</a>,
see <a href="../install.html#librarydependencies">installation dependencies</a> concerning the
supporting libraries.</p>
<p>
The property <code>ant.regexp.regexpimpl</code> governs which regular expression implementation
target="_top">jakarta-regexp</a> and <a href="https://attic.apache.org/projects/jakarta-oro.html"
target="_top">jakarta-ORO</a>, see <a href="../install.html#librarydependencies">installation
dependencies</a> concerning the supporting libraries.</p>
<p>The property <code>ant.regexp.regexpimpl</code> governs which regular expression implementation
will be chosen. Possible values for this property are:</p>
<ul>
<li><code>org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp</code></li>
@@ -76,27 +69,23 @@ available.</p>
There are cross-platform issues for matches related to line terminator. For example if you
use <q>$</q> to anchor your regular expression on the end of a line the results might be very
different depending on both your platform and the regular expression library you use. It
is <em>highly recommended</em> that you test your pattern on both Unix and Windows platforms
before you rely on it.</p>
is <em>highly recommended</em> that you test your pattern on both Unix and Windows platforms before
you rely on it.</p>
<ul>
<li>Jakarta Oro defines a line terminator as <q>\n</q> and is consistent with Perl.</li>
<li>Jakarta RegExp uses a system-dependent line terminator.</li>
<li>JDK 1.4 uses <q>\n</q>, <q>\r\n</q>, <q>\u0085</q>, <q>\u2028</q>, <q>\u2029</q> as a
default but is configured in the wrapper to use only <q>\n</q> (UNIX_LINE)</li>
</ul>
<p>
<em>We used to recommend that you use Jakarta ORO but since its development has been retired
Java's built-in regex package is likely the best choice going forward.</em>
</p>
<p><em>We used to recommend that you use Jakarta ORO but since its development has been retired
Java's built-in regex package is likely the best choice going forward.</em></p>
<h3>Usage</h3> The following tasks and types use the Regexp type:
<ul>
<li><a href="../Tasks/replaceregexp.html">ReplaceRegExp task</a></li>
<li><a href="filterchain.html#linecontainsregexp">LineContainsRegexp filter</a></li>
</ul>
<p>
These string filters also use the mechanism of regexp to choose a regular expression
implementation:
</p>
<p>These string filters also use the mechanism of regexp to choose a regular expression
implementation:</p>
<ul>
<li><a href="filterchain.html#containsregex">ContainsRegex string filter</a></li>
<li><a href="filterchain.html#replaceregex">ReplaceRegex string filter</a></li>


+ 212
- 217
manual/Types/selectors.html View File

@@ -24,21 +24,20 @@
<body>
<h2>Selectors</h2>

<p>Selectors are a mechanism whereby the files that make up a <code>&lt;fileset&gt;</code>
can be selected based on criteria other than filename as provided by
<p>Selectors are a mechanism whereby the files that make up a <code>&lt;fileset&gt;</code> can
be selected based on criteria other than filename as provided by
the <code>&lt;include&gt;</code> and <code>&lt;exclude&gt;</code> tags.</p>

<h3>How to use a Selector</h3>

<p>A selector is an element of FileSet, and appears within it. It can also be defined
outside of any target by using the <code>&lt;selector&gt;</code> tag and then using it as a
reference.</p>
<p>A selector is an element of FileSet, and appears within it. It can also be defined outside of
any target by using the <code>&lt;selector&gt;</code> tag and then using it as a reference.</p>

<p>Different selectors have different attributes. Some selectors can contain other
selectors, and these are called <a href="#selectcontainers"><code>Selector
Containers</code></a>. There is also a category of selectors that allow user-defined
extensions, called <a href="#customselect"><code>Custom Selectors</code></a>. The ones
built in to Apache Ant are called <a href="#coreselect"><code>Core Selectors</code></a>.</p>
<p>Different selectors have different attributes. Some selectors can contain other selectors,
and these are called <a href="#selectcontainers"><code>Selector Containers</code></a>. There is
also a category of selectors that allow user-defined extensions,
called <a href="#customselect"><code>Custom Selectors</code></a>. The ones built in to Apache
Ant are called <a href="#coreselect"><code>Core Selectors</code></a>.</p>

<h3 id="coreselect">Core Selectors</h3>

@@ -52,29 +51,29 @@
contain a particular text string</li>
<li><a href="#dateselect"><code>&lt;date&gt;</code></a>&mdash;Select files that have been
modified either before or after a particular date and time</li>
<li><a href="#dependselect"><code>&lt;depend&gt;</code></a>&mdash;Select files that have
been modified more recently than equivalent files elsewhere</li>
<li><a href="#depthselect"><code>&lt;depth&gt;</code></a>&mdash;Select files that appear
so many directories down in a directory tree</li>
<li><a href="#differentselect"><code>&lt;different&gt;</code></a>&mdash;Select files that
are different from those elsewhere</li>
<li><a href="#filenameselect"><code>&lt;filename&gt;</code></a>&mdash;Select files whose
name matches a particular pattern. Equivalent to the include and exclude elements of a
<li><a href="#dependselect"><code>&lt;depend&gt;</code></a>&mdash;Select files that have been
modified more recently than equivalent files elsewhere</li>
<li><a href="#depthselect"><code>&lt;depth&gt;</code></a>&mdash;Select files that appear so
many directories down in a directory tree</li>
<li><a href="#differentselect"><code>&lt;different&gt;</code></a>&mdash;Select files that are
different from those elsewhere</li>
<li><a href="#filenameselect"><code>&lt;filename&gt;</code></a>&mdash;Select files whose name
matches a particular pattern. Equivalent to the include and exclude elements of a
patternset.</li>
<li><a href="#presentselect"><code>&lt;present&gt;</code></a>&mdash;Select files that
either do or do not exist in some other location</li>
<li><a href="#regexpselect"><code>&lt;containsregexp&gt;</code></a>&mdash;Select files
that match a regular expression</li>
<li><a href="#sizeselect"><code>&lt;size&gt;</code></a>&mdash;Select files that are larger
or smaller than a particular number of bytes.</li>
<li><a href="#presentselect"><code>&lt;present&gt;</code></a>&mdash;Select files that either
do or do not exist in some other location</li>
<li><a href="#regexpselect"><code>&lt;containsregexp&gt;</code></a>&mdash;Select files that
match a regular expression</li>
<li><a href="#sizeselect"><code>&lt;size&gt;</code></a>&mdash;Select files that are larger or
smaller than a particular number of bytes.</li>
<li><a href="#typeselect"><code>&lt;type&gt;</code></a>&mdash;Select files that are either
regular files or directories.</li>
<li><a href="#modified"><code>&lt;modified&gt;</code></a>&mdash;Select files if the return
value of the configured algorithm is different from that stored in a cache.</li>
<li><a href="#signedselector"><code>&lt;signedselector&gt;</code></a>&mdash;Select files
if they are signed, and optionally if they have a signature of a certain name.</li>
<li><a href="#scriptselector"><code>&lt;scriptselector&gt;</code></a>&mdash;Use a BSF or
JSR 223 scripting language to create your own selector</li>
<li><a href="#signedselector"><code>&lt;signedselector&gt;</code></a>&mdash;Select files if
they are signed, and optionally if they have a signature of a certain name.</li>
<li><a href="#scriptselector"><code>&lt;scriptselector&gt;</code></a>&mdash;Use a BSF or JSR
223 scripting language to create your own selector</li>
<li><a href="#readable"><code>&lt;readable&gt;</code></a>&mdash;Select files if they are
readable.</li>
<li><a href="#writable"><code>&lt;writable&gt;</code></a>&mdash;Select files if they are
@@ -82,16 +81,15 @@
<li><a href="#executable"><code>&lt;executable&gt;</code></a>&mdash;Select files if they
are executable.</li>
<li><a href="#symlink"><code>&lt;symlink&gt;</code></a>&mdash;Select files if they are
symlink.</li>
<li><a href="#ownedBy"><code>&lt;ownedBy&gt;</code></a>&mdash;Select files if they are
owned by a given user.</li>
symlinks.</li>
<li><a href="#ownedBy"><code>&lt;ownedBy&gt;</code></a>&mdash;Select files if they are owned
by a given user.</li>
</ul>

<h4 id="containsselect">Contains Selector</h4>

<p>The <code>&lt;contains&gt;</code> tag in a FileSet limits the files defined by that
fileset to only those which contain the string specified by the <code>text</code>
attribute.</p>
<p>The <code>&lt;contains&gt;</code> tag in a FileSet limits the files defined by that fileset
to only those which contain the string specified by the <code>text</code> attribute.</p>
<p>The <code>&lt;contains&gt;</code> selector can be used as a ResourceSelector (see
the <a href="resources.html#restrict">&lt;restrict&gt;</a> ResourceCollection).</p>

@@ -115,8 +113,8 @@
</tr>
<tr>
<td>ignorewhitespace</td>
<td>Whether to eliminate whitespace before checking for the string in
the <var>text</var> attribute.</td>
<td>Whether to eliminate whitespace before checking for the string in the <var>text</var>
attribute.</td>
<td>No; default is <q>false</q></td>
</tr>
<tr>
@@ -139,9 +137,9 @@

<h4 id="dateselect">Date Selector</h4>

<p>The <code>&lt;date&gt;</code> tag in a FileSet will put a limit on the files specified by
the include tag, so that tags whose last modified date does not meet the date limits
specified by the selector will not end up being selected.</p>
<p>The <code>&lt;date&gt;</code> tag in a FileSet will put a limit on the files specified by the
include tag, so that tags whose last modified date does not meet the date limits specified by
the selector will not end up being selected.</p>

<table class="attr">
<tr>
@@ -151,9 +149,9 @@
</tr>
<tr>
<td>datetime</td>
<td>Specifies the date and time to test for. Should be in the format <q>MM/dd/yyyy
hh:mm a</q> using the US locale, or an alternative pattern specified via
the <var>pattern</var> attribute.
<td>Specifies the date and time to test for. Should be in the format <q>MM/dd/yyyy hh:mm
a</q> using the US locale, or an alternative pattern specified via the <var>pattern</var>
attribute.
</td>
<td rowspan="2">At least one of the two</td>
</tr>
@@ -169,17 +167,19 @@
whose last modified times should be before, after, or equal to the specified
value. Acceptable values for this attribute are:
<ul>
<li><q>before</q>&mdash;select files whose last modified date is before the indicated date</li>
<li><q>after</q>&mdash;select files whose last modified date is after the indicated date</li>
<li><q>equal</q>&mdash;select files whose last modified date is this exact date</li>
<li><q>before</q>&mdash;select files whose last modified date is before the indicated
date</li>
<li><q>after</q>&mdash;select files whose last modified date is after the indicated
date</li>
<li><q>equal</q>&mdash;select files whose last modified date is this exact date</li>
</ul></td>
<td>No; default is <q>equal</q></td>
</tr>
<tr>
<td>granularity</td>
<td>The number of milliseconds leeway to use when comparing file modification
times. This is needed because not every file system supports tracking the last
modified time to the millisecond level.</td>
<td>The number of milliseconds leeway to use when comparing file modification times. This is
needed because not every file system supports tracking the last modified time to the
millisecond level.</td>
<td>No; default is 0 milliseconds, or 2 seconds on DOS systems</td>
</tr>
<tr>
@@ -211,9 +211,9 @@
another, equivalent file in another location.</p>

<p>The <code>&lt;depend&gt;</code> tag supports the use of a
contained <a href="mapper.html"><code>&lt;mapper&gt;</code></a> element to define the
location of the file to be compared against. If no <code>&lt;mapper&gt;</code> element is
specified, the <code>identity</code> type mapper is used.</p>
contained <a href="mapper.html"><code>&lt;mapper&gt;</code></a> element to define the location
of the file to be compared against. If no <code>&lt;mapper&gt;</code> element is specified,
the <code>identity</code> type mapper is used.</p>

<p>The <code>&lt;depend&gt;</code> selector is case-sensitive.</p>

@@ -226,15 +226,15 @@
<tr>
<td>targetdir</td>
<td>The base directory to look for the files to compare against. The precise location
depends on a combination of this attribute and the <code>&lt;mapper&gt;</code>
element, if any.</td>
depends on a combination of this attribute and the <code>&lt;mapper&gt;</code> element, if
any.</td>
<td>Yes</td>
</tr>
<tr>
<td>granularity</td>
<td>The number of milliseconds leeway to give before deciding a file is out of
date. This is needed because not every file system supports tracking the last modified
time to the millisecond level.</td>
<td>The number of milliseconds leeway to give before deciding a file is out of date. This is
needed because not every file system supports tracking the last modified time to the
millisecond level.</td>
<td>No; default is 0 milliseconds, or 2 seconds on DOS systems</td>
</tr>
</table>
@@ -250,8 +250,8 @@

<h4 id="depthselect">Depth Selector</h4>

<p>The <code>&lt;depth&gt;</code> tag selects files based on how many directory levels deep
they are in relation to the base directory of the fileset.</p>
<p>The <code>&lt;depth&gt;</code> tag selects files based on how many directory levels deep they
are in relation to the base directory of the fileset.</p>

<table class="attr">
<tr>
@@ -261,14 +261,14 @@
</tr>
<tr>
<td>min</td>
<td>The minimum number of directory levels below the base directory that a file must be
in order to be selected.</td>
<td>The minimum number of directory levels below the base directory that a file must be in
order to be selected.</td>
<td rowspan="2">At least one of the two; default is no limit</td>
</tr>
<tr>
<td>max</td>
<td class="left">The maximum number of directory levels below the base directory that a
file can be and still be selected.</td>
<td class="left">The maximum number of directory levels below the base directory that a file
can be and still be selected.</td>
</tr>
</table>

@@ -279,14 +279,13 @@
&lt;depth max=&quot;1&quot;/&gt;
&lt;/fileset&gt;</pre>

<p>Selects all files in the base directory and one directory below
that.</p>
<p>Selects all files in the base directory and one directory below that.</p>

<h4 id="differentselect">Different Selector</h4>

<p>The <code>&lt;different&gt;</code> selector will select a file if it is deemed to be
'different' from an equivalent file in another location. The rules for determining
difference between the two files are as follows:<p>
'different' from an equivalent file in another location. The rules for determining difference
between the two files are as follows:<p>
<ol>
<li>If a file is only present in the resource collection you apply the selector to but not
in <var>targetdir</var> (or after applying the mapper) the file is selected.</li>
@@ -295,22 +294,21 @@
<li>Files with different lengths are different.</li>
<li>If <var>ignoreFileTimes</var> is turned <q>off</q>, then differing file timestamps will
cause files to be regarded as different.</li>
<li>Unless <var>ignoreContents</var> is set to <q>true</q>, a byte-for-byte check is run
against the two files.</li>
<li>Unless <var>ignoreContents</var> is set to <q>true</q>, a byte-for-byte check is run against
the two files.</li>
</ol>
<p>This is a useful selector to work with programs and tasks that don't handle dependency
checking properly; even if a predecessor task always creates its output files, followup
tasks can be driven off copies made with a different selector, so their dependencies are
driven on the absolute state of the files, not just a timestamp. For example: anything
fetched from a web site, or the output of some program. To reduce the amount of checking,
when using this task inside a <code>&lt;copy&gt;</code> task,
set <var>preservelastmodified</var> to <q>true</q> to propagate the timestamp from the
source file to the destination file.</p>
checking properly; even if a predecessor task always creates its output files, followup tasks
can be driven off copies made with a different selector, so their dependencies are driven on the
absolute state of the files, not just a timestamp. For example: anything fetched from a web
site, or the output of some program. To reduce the amount of checking, when using this task
inside a <code>&lt;copy&gt;</code> task, set <var>preservelastmodified</var> to <q>true</q> to
propagate the timestamp from the source file to the destination file.</p>

<p>The <code>&lt;different&gt;</code> selector supports the use of a
contained <a href="mapper.html"><code>&lt;mapper&gt;</code></a> element to define the
location of the file to be compared against. If no <code>&lt;mapper&gt;</code> element is
specified, the <code>identity</code> type mapper is used.</p>
contained <a href="mapper.html"><code>&lt;mapper&gt;</code></a> element to define the location
of the file to be compared against. If no <code>&lt;mapper&gt;</code> element is specified,
the <code>identity</code> type mapper is used.</p>

<table class="attr">
<tr>
@@ -321,8 +319,8 @@
<tr>
<td>targetdir</td>
<td>The base directory to look for the files to compare against. The precise location
depends on a combination of this attribute and the <code>&lt;mapper&gt;</code>
element, if any.</td>
depends on a combination of this attribute and the <code>&lt;mapper&gt;</code> element, if
any.</td>
<td>Yes</td>
</tr>
<tr>
@@ -338,9 +336,9 @@
</tr>
<tr>
<td>granularity</td>
<td>The number of milliseconds leeway to give before deciding a file is out of
date. This is needed because not every file system supports tracking the last modified
time to the millisecond level.</td>
<td>The number of milliseconds leeway to give before deciding a file is out of date. This is
needed because not every file system supports tracking the last modified time to the
millisecond level.</td>
<td>No; default is 0 milliseconds, or 2 seconds on DOS systems</td>
</tr>
</table>
@@ -353,14 +351,14 @@
ignoreFileTimes="true"/&gt;
&lt;/fileset&gt;</pre>

<p>Compares all the Java source files between the 1.4.1 and the 1.5 release and selects
those who are different, disregarding file times.</p>
<p>Compares all the Java source files between the 1.4.1 and the 1.5 release and selects those
who are different, disregarding file times.</p>

<h4 id="filenameselect">Filename Selector</h4>

<p>The <code>&lt;filename&gt;</code> tag acts like the <code>&lt;include&gt;</code>
and <code>&lt;exclude&gt;</code> tags within a fileset. By using a selector instead,
however, one can combine it with all the other selectors using
and <code>&lt;exclude&gt;</code> tags within a fileset. By using a selector instead, however,
one can combine it with all the other selectors using
whatever <a href="#selectcontainers">selector container</a> is desired.</p>

<p>The <code>&lt;filename&gt;</code> selector is case-sensitive.</p>
@@ -373,8 +371,8 @@
</tr>
<tr>
<td>name</td>
<td>The name of files to select. The name parameter can contain the standard Ant
wildcard characters.</td>
<td>The name of files to select. The name parameter can contain the standard Ant wildcard
characters.</td>
<td rowspan="2">Exactly one of the two</td>
</tr>
<tr>
@@ -388,8 +386,8 @@
</tr>
<tr>
<td>negate</td>
<td>Whether to reverse the effects of this filename selection, therefore emulating an
<code>exclude</code> rather than <code>include</code> tag.</td>
<td>Whether to reverse the effects of this filename selection, therefore emulating
an <code>exclude</code> rather than <code>include</code> tag.</td>
<td>No; default is <q>false</q></td>
</tr>
</table>
@@ -409,9 +407,9 @@
another directory tree.</p>

<p>The <code>&lt;present&gt;</code> tag supports the use of a
contained <a href="mapper.html"><code>&lt;mapper&gt;</code></a> element to define the
location of the file to be tested against. If no <code>&lt;mapper&gt;</code> element is
specified, the <code>identity</code> type mapper is used.</p>
contained <a href="mapper.html"><code>&lt;mapper&gt;</code></a> element to define the location
of the file to be tested against. If no <code>&lt;mapper&gt;</code> element is specified,
the <code>identity</code> type mapper is used.</p>

<p>The <code>&lt;present&gt;</code> selector is case-sensitive.</p>

@@ -424,19 +422,19 @@
<tr>
<td>targetdir</td>
<td>The base directory to look for the files to compare against. The precise location
depends on a combination of this attribute and the <code>&lt;mapper&gt;</code>
element, if any.</td>
depends on a combination of this attribute and the <code>&lt;mapper&gt;</code> element, if
any.</td>
<td>Yes</td>
</tr>
<tr>
<td>present</td>
<td>Whether we are requiring that a file is present in the source directory tree only,
or in both the source and the target directory tree. Valid values are:
<td>Whether we are requiring that a file is present in the source directory tree only, or in
both the source and the target directory tree. Valid values are:
<ul>
<li><q>srconly</q>&mdash;select files only if they are in the source directory tree
but not in the target directory tree</li>
<li><q>both</q >-- select files only if they are present both in the source and
target directory trees</li>
<li><q>srconly</q>&mdash;select files only if they are in the source directory tree but
not in the target directory tree</li>
<li><q>both</q >-- select files only if they are present both in the source and target
directory trees</li>
</ul>
Setting this attribute to <q>srconly</q> is equivalent to wrapping the selector in
the <code>&lt;not&gt;</code> selector container.</td>
@@ -499,14 +497,14 @@
&lt;containsregexp expression=&quot;[4-6]\.[0-9]&quot;/&gt;
&lt;/fileset&gt;</pre>

<p>Selects all the text files that match the regular expression (have a 4, 5 or 6 followed
by a period and a number from 0 to 9).
<p>Selects all the text files that match the regular expression (have a 4, 5 or 6 followed by a
period and a number from 0 to 9).

<h4 id="sizeselect">Size Selector</h4>

<p>The <code>&lt;size&gt;</code> tag in a FileSet will put a limit on the files specified by
the include tag, so that tags which do not meet the size limits specified by the selector
will not end up being selected.</p>
<p>The <code>&lt;size&gt;</code> tag in a FileSet will put a limit on the files specified by the
include tag, so that tags which do not meet the size limits specified by the selector will not
end up being selected.</p>

<table class="attr">
<tr>
@@ -522,17 +520,17 @@
</tr>
<tr>
<td>units</td>
<td>The units that the <code>value</code> attribute is expressed in. When using the
standard single letter SI designations, such as <q>k</q>, <q>M</q>, or <q>G</q>,
multiples of 1000 are used. If you want to use power of 2 units, use the IEC
standard: <q>Ki</q> for 1024, <q>Mi</q> for 1048576, and so on. The default is no units,
which means the <var>value</var> attribute expresses the exact number of bytes.</td>
<td>The units that the <code>value</code> attribute is expressed in. When using the standard
single letter SI designations, such as <q>k</q>, <q>M</q>, or <q>G</q>, multiples of 1000
are used. If you want to use power of 2 units, use the IEC standard: <q>Ki</q> for
1024, <q>Mi</q> for 1048576, and so on. The default is no units, which means
the <var>value</var> attribute expresses the exact number of bytes.</td>
<td>No</td>
</tr>
<tr>
<td>when</td>
<td>Indicates how to interpret the size, whether the files to be selected should be
larger, smaller, or equal to that value. Acceptable values for this attribute are:
<td>Indicates how to interpret the size, whether the files to be selected should be larger,
smaller, or equal to that value. Acceptable values for this attribute are:
<ul>
<li><q>less</q>&mdash;select files less than the indicated size</li>
<li><q>more</q>&mdash;select files greater than the indicated size</li>
@@ -584,8 +582,8 @@
&lt;type type="dir"/&gt;
&lt;/fileset&gt;</pre>

<p>The Type Selector is often used in conjunction with other selectors. For example, to
select files that also exist in a <samp>template</samp> directory, but avoid selecting empty
<p>The Type Selector is often used in conjunction with other selectors. For example, to select
files that also exist in a <samp>template</samp> directory, but avoid selecting empty
directories, use:</p>

<pre>
@@ -597,10 +595,9 @@
&lt;/fileset&gt;</pre>

<h4 id="modified">Modified Selector</h4>
<p>The <code>&lt;modified&gt;</code> selector computes a value for a file, compares that to
the value stored in a cache and select the file, if these two values differ.</p>
<p>Because this selector is highly configurable the order in which the selection is done
is:</p>
<p>The <code>&lt;modified&gt;</code> selector computes a value for a file, compares that to the
value stored in a cache and select the file, if these two values differ.</p>
<p>Because this selector is highly configurable the order in which the selection is done is:</p>
<ol>
<li>get the absolute path for the file</li>
<li>get the cached value from the configured cache (absolute path as key)</li>
@@ -609,15 +606,14 @@
<li>update the cache if needed and requested</li>
<li>do the selection according to the comparison result</li>
</ol>
<p>The comparison, computing of the hashvalue and the store is done by implementation of
special interfaces. Therefore they may provide additional parameters.</p>
<p>The comparison, computing of the hashvalue and the store is done by implementation of special
interfaces. Therefore they may provide additional parameters.</p>

<p>The <code>&lt;modified&gt;</code> selector can be used as a ResourceSelector (see
the <a href="resources.html#restrict">&lt;restrict&gt;</a> ResourceCollection). In that
case it maps simple file resources to files and does its job. If the resource is from
another type, the <code>&lt;modified&gt;</code> selector tries to
(<strong>attention!</strong>) copy the content into a local file for computing the
hashvalue.</p>
the <a href="resources.html#restrict">&lt;restrict&gt;</a> ResourceCollection). In that case it
maps simple file resources to files and does its job. If the resource is from another type,
the <code>&lt;modified&gt;</code> selector tries to (<strong>attention!</strong>) copy the
content into a local file for computing the hashvalue.</p>

<table class="attr">
<tr>
@@ -688,27 +684,26 @@
</tr>
<tr>
<td>selres</td>
<td>Should Resources without an InputStream, and therefore without checking, be
selected? (boolean)</td>
<td>Should Resources without an InputStream, and therefore without checking, be selected?
(boolean)</td>
<td>No; defaults to <q>true</q>. Only relevant when used as ResourceSelector.</td>
</tr>
<tr>
<td>delayupdate</td>
<td>If set to <q>true</q>, the storage of the cache will be delayed until the next
finished BuildEvent; task finished, target finished or build finished, whichever comes
first. This is provided for increased performance. If set to <q>false</q>, the
storage of the cache will happen with each change. This attribute depends upon
the <var>update</var> attribute. (boolean)</td>
<td>If set to <q>true</q>, the storage of the cache will be delayed until the next finished
BuildEvent; task finished, target finished or build finished, whichever comes first. This
is provided for increased performance. If set to <q>false</q>, the storage of the cache
will happen with each change. This attribute depends upon the <var>update</var>
attribute. (boolean)</td>
<td>No; defaults to <q>true</q></td>
</tr>
</table>

<h5>Parameters specified as nested elements</h5>

<p>The <code>&lt;modified&gt;</code> selector supports a
nested <code>&lt;classpath&gt;</code> element that represents
a <a href="../using.html#path">path-like structure</a> for finding custom interface
implementations.</p>
<p>The <code>&lt;modified&gt;</code> selector supports a nested <code>&lt;classpath&gt;</code>
element that represents a <a href="../using.html#path">path-like structure</a> for finding
custom interface implementations.</p>

<p>All attributes of a <code>&lt;modified&gt;</code> selector an be set with
nested <code>&lt;param/&gt;</code> tags. Additional values can be set
@@ -758,8 +753,8 @@
</tr>
<tr>
<td>propertyfile</td>
<td>Use the <code>java.util.Properties</code> class and its possibility to load and store
to file. This Cache implementation supports the following attributes:
<td>Use the <code>java.util.Properties</code> class and its possibility to load and store to
file. This Cache implementation supports the following attributes:
<ul>
<li><var>cache.cachefile</var> (optional): Name of the properties file; default
is <q>cache.properties</q></li>
@@ -808,8 +803,8 @@
&lt;/fileset&gt;
&lt;/copy&gt;</pre>

<p>This is the same example rewritten as CoreSelector with setting the all the values (same
as defaults are).</p>
<p>This is the same example rewritten as CoreSelector with setting the all the values (same as
defaults are).</p>

<pre>
&lt;copy todir="dest"&gt;
@@ -842,9 +837,9 @@
&lt;/target&gt;</pre>

<p>A useful scenario for this selector inside a build environment for homepage generation
(e.g. with <a href="https://forrest.apache.org/">Apache Forrest</a>). Here
all <strong>changed</strong> files are uploaded to the server. The CacheSelector saves
therefore much upload time.</p>
(e.g. with <a href="https://forrest.apache.org/" target="_top">Apache Forrest</a>). Here
all <strong>changed</strong> files are uploaded to the server. The CacheSelector saves therefore
much upload time.</p>

<pre>
&lt;modified cacheclassname="com.mycompany.MyCache"&gt;
@@ -857,14 +852,14 @@
cache implementation</p>

<h4 id="ModSelNote">Note on RuleBasedCollator</h4>
<p>The RuleBasedCollator needs a format for its work, but its needed while
instantiation. There is a problem in the initialization algorithm for this case. Therefore
you should not use this (or tell me the workaround :-).</p>
<p>The RuleBasedCollator needs a format for its work, but its needed while instantiation. There
is a problem in the initialization algorithm for this case. Therefore you should not use this
(or tell me the workaround :-).</p>

<h4 id="signedselector">Signed Selector</h4>

<p>The <code>&lt;signedselector&gt;</code> tag selects signed files and optionally signed
with a certain name.</p>
<p>The <code>&lt;signedselector&gt;</code> tag selects signed files and optionally signed with a
certain name.</p>
<p><em>Since Apache Ant 1.7</em></p>
<table class="attr">
<tr>
@@ -881,37 +876,37 @@

<h4 id="readable">Readable Selector</h4>

<p>The <code>&lt;readable&gt;</code> selector selects only files that are readable. Ant
only invokes <code>java.io.File#canRead</code> so if a file is unreadable but JVM cannot
detect this state, this selector will still select the file.</p>
<p>The <code>&lt;readable&gt;</code> selector selects only files that are readable. Ant only
invokes <code>java.io.File#canRead</code> so if a file is unreadable but JVM cannot detect this
state, this selector will still select the file.</p>

<h4 id="writable">Writable Selector</h4>

<p>The <code>&lt;writable&gt;</code> selector selects only files that are writable. Ant
only invokes <code>java.io.File#canWrite</code> so if a file is nonwritable but JVM cannot
detect this state, this selector will still select the file.</p>
<p>The <code>&lt;writable&gt;</code> selector selects only files that are writable. Ant only
invokes <code>java.io.File#canWrite</code> so if a file is nonwritable but JVM cannot detect
this state, this selector will still select the file.</p>

<h4 id="executable">Executable Selector</h4>

<p>The <code>&lt;executable&gt;</code> selector selects only files that are executable. Ant
only invokes <code>java.nio.file.Files#isExecutable</code> so if a file is not executable
but JVM cannot detect this state, this selector will still select the file.</p>
only invokes <code>java.nio.file.Files#isExecutable</code> so if a file is not executable but
JVM cannot detect this state, this selector will still select the file.</p>

<p><em>Since Ant 1.10.0</em></p>

<h4 id="symlink">Symlink Selector</h4>

<p>The <code>&lt;symlink&gt;</code> selector selects only files that are symbolic links.
Ant only invokes <code>java.nio.file.Files#isSymbolicLink</code> so if a file is a symbolic
link but JVM cannot detect this state, this selector will not select the file.</p>
<p>The <code>&lt;symlink&gt;</code> selector selects only files that are symbolic links. Ant
only invokes <code>java.nio.file.Files#isSymbolicLink</code> so if a file is a symbolic link but
JVM cannot detect this state, this selector will not select the file.</p>

<p><em>Since Ant 1.10.0</em></p>

<h4 id="ownedBy">OwnedBy Selector</h4>

<p>The <code>&lt;ownedBy&gt;</code> selector selects only files that are owned by the given
user. Ant only invokes <code>java.nio.file.Files#getOwner</code> so if a file system
doesn't support the operation this selector will not select the file.</p>
user. Ant only invokes <code>java.nio.file.Files#getOwner</code> so if a file system doesn't
support the operation this selector will not select the file.</p>

<p><em>Since Ant 1.10.0</em></p>

@@ -932,9 +927,9 @@

<p>The <code>&lt;scriptselector&gt;</code> element enables you to write a complex selection
algorithm in any <a href="https://jakarta.apache.org/bsf" target="_top">Apache BSF</a>
or <a href="https://jcp.org/aboutJava/communityprocess/maintenance/jsr223/223ChangeLog.html">JSR
223</a> supported language. See the <a href="../Tasks/script.html">Script</a> task for an
explanation of scripts and dependencies.</p>
or <a href="https://jcp.org/aboutJava/communityprocess/maintenance/jsr223/223ChangeLog.html"
target="_top">JSR 223</a> supported language. See the <a href="../Tasks/script.html">Script</a>
task for an explanation of scripts and dependencies.</p>
<p><em>Since Apache Ant 1.7</em></p>
<table class="attr">
<tr>
@@ -985,12 +980,12 @@
the <a href="../Tasks/script.html">script</a> task on how to use this element.</p>
<p>If no <var>src</var> attribute is supplied, the script must be nested inside the selector
declaration.</p>
<p>The embedded script is invoked for every test, with the bean <code>self</code> is bound
to the selector. It has an attribute <var>selected</var> which can be set
<p>The embedded script is invoked for every test, with the bean <code>self</code> is bound to
the selector. It has an attribute <var>selected</var> which can be set
using <code>setSelected(boolean)</code> to select a file.</p>

<p>The following beans are configured for every script, alongside the classic set of
project, properties, and targets.</p>
<p>The following beans are configured for every script, alongside the classic set of project,
properties, and targets.</p>

<table>
<tr>
@@ -1065,8 +1060,8 @@

<h3 id="selectcontainers">Selector Containers</h3>

<p>To create more complex selections, a variety of selectors that contain other selectors
are available for your use. They combine the selections of their child selectors in various
<p>To create more complex selections, a variety of selectors that contain other selectors are
available for your use. They combine the selections of their child selectors in various
ways.</p>

<p>The selector containers are:</p>
@@ -1078,21 +1073,21 @@
majority of its selectors select it.</li>
<li><a href="#noneselect"><code>&lt;none&gt;</code></a>&mdash;select a file only if none
of the contained selectors select it.</li>
<li><a href="#notselect"><code>&lt;not&gt;</code></a>&mdash;can contain only one
selector, and reverses what it selects and doesn't select.</li>
<li><a href="#notselect"><code>&lt;not&gt;</code></a>&mdash;can contain only one selector, and
reverses what it selects and doesn't select.</li>
<li><a href="#orselect"><code>&lt;or&gt;</code></a>&mdash;selects a file if any one of the
contained selectors selects it.</li>
<li><a href="#selectorselect"><code>&lt;selector&gt;</code></a>&mdash;contains only one
selector and forwards all requests to it without alteration, provided that
any <code>&quot;if&quot;</code> or <code>&quot;unless&quot;</code> conditions are
met. This is the selector to use if you want to define a reference. It is usable as an
element of <code>&lt;project&gt;</code>. It is also the one to use if you want selection
of files to be dependent on Ant property settings.</li>
any <code>&quot;if&quot;</code> or <code>&quot;unless&quot;</code> conditions are met. This
is the selector to use if you want to define a reference. It is usable as an element
of <code>&lt;project&gt;</code>. It is also the one to use if you want selection of files to
be dependent on Ant property settings.</li>
</ul>

<p>All selector containers can contain any other selector, including other containers, as an
element. Using containers, the selector tags can be arbitrarily deep. Here is a complete
list of allowable selector elements within a container:</p>
element. Using containers, the selector tags can be arbitrarily deep. Here is a complete list of
allowable selector elements within a container:</p>

<ul>
<li><code>&lt;and&gt;</code></li>
@@ -1113,9 +1108,9 @@

<h4 id="andselect">And Selector</h4>

<p>The <code>&lt;and&gt;</code> tag selects files that are selected by all of the elements
it contains. It returns as soon as it finds a selector that does not select the file, so it
is not guaranteed to check every selector.</p>
<p>The <code>&lt;and&gt;</code> tag selects files that are selected by all of the elements it
contains. It returns as soon as it finds a selector that does not select the file, so it is not
guaranteed to check every selector.</p>

<p>Here is an example of how to use the And Selector:</p>

@@ -1132,9 +1127,9 @@

<h4 id="majorityselect">Majority Selector</h4>

<p>The <code>&lt;majority&gt;</code> tag selects files provided that a majority of the
contained elements also select it. Ties are dealt with as specified by
the <var>allowtie</var> attribute.</p>
<p>The <code>&lt;majority&gt;</code> tag selects files provided that a majority of the contained
elements also select it. Ties are dealt with as specified by the <var>allowtie</var>
attribute.</p>

<table class="attr">
<tr>
@@ -1144,8 +1139,8 @@
</tr>
<tr>
<td>allowtie</td>
<td>Whether files should be selected if there are an even number of selectors selecting
them as are not selecting them.</td>
<td>Whether files should be selected if there are an even number of selectors selecting them
as are not selecting them.</td>
<td>No; default is <q>true</q></td>
</tr>
</table>
@@ -1162,14 +1157,14 @@
&lt;/fileset&gt;</pre>

<p>Selects all the HTML files which contain at least two of the three
phrases <q>project</q>, <q>taskdef</q>, and <q>IntrospectionHelper</q> (this last phrase
must match case exactly).</p>
phrases <q>project</q>, <q>taskdef</q>, and <q>IntrospectionHelper</q> (this last phrase must
match case exactly).</p>

<h4 id="noneselect">None Selector</h4>

<p>The <code>&lt;none&gt;</code> tag selects files that are not selected by any of the
elements it contains. It returns as soon as it finds a selector that selects the file, so it
is not guaranteed to check every selector.</p>
<p>The <code>&lt;none&gt;</code> tag selects files that are not selected by any of the elements
it contains. It returns as soon as it finds a selector that selects the file, so it is not
guaranteed to check every selector.</p>

<p>Here is an example of how to use the None Selector:</p>

@@ -1204,9 +1199,9 @@

<h4 id="orselect">Or Selector</h4>

<p>The <code>&lt;or&gt;</code> tag selects files that are selected by any one of the
elements it contains. It returns as soon as it finds a selector that selects the file, so it
is not guaranteed to check every selector.</p>
<p>The <code>&lt;or&gt;</code> tag selects files that are selected by any one of the elements it
contains. It returns as soon as it finds a selector that selects the file, so it is not
guaranteed to check every selector.</p>

<p>Here is an example of how to use the Or Selector:</p>

@@ -1224,15 +1219,15 @@

<h4 id="selectorselect">Selector Reference</h4>

<p>The <code>&lt;selector&gt;</code> tag is used to create selectors that can be reused
through references. It is the only selector which can be used outside of any target, as an
element of the <code>&lt;project&gt;</code> tag. It can contain only one other selector, but
of course that selector can be a container.</p>
<p>The <code>&lt;selector&gt;</code> tag is used to create selectors that can be reused through
references. It is the only selector which can be used outside of any target, as an element of
the <code>&lt;project&gt;</code> tag. It can contain only one other selector, but of course that
selector can be a container.</p>

<p>The <code>&lt;selector&gt;</code> tag can also be used to select files conditionally
based on whether an Ant property exists or not. This functionality is realized using
the <var>if</var> and <var>unless</var> attributes in exactly the same way they are used on
targets or on the <code>&lt;include&gt;</code> and <code>&lt;exclude&gt;</code> tags within
<p>The <code>&lt;selector&gt;</code> tag can also be used to select files conditionally based on
whether an Ant property exists or not. This functionality is realized using the <var>if</var>
and <var>unless</var> attributes in exactly the same way they are used on targets or on
the <code>&lt;include&gt;</code> and <code>&lt;exclude&gt;</code> tags within
a <code>&lt;patternset&gt;</code>.</p>

<table class="attr">
@@ -1283,8 +1278,8 @@

&lt;/project&gt;</pre>

<p>Zips up all the java files which have an up-to-date equivalent class file and javadoc
file associated with them.</p>
<p>Zips up all the java files which have an up-to-date equivalent class file and javadoc file
associated with them.</p>

<p>And an example of selecting files conditionally, based on whether properties are set:</p>

@@ -1312,14 +1307,14 @@

<h3 id="customselect">Custom Selectors</h3>

<p>You can write your own selectors and use them within the selector containers by
specifying them within the <code>&lt;custom&gt;</code> tag.</p>
<p>You can write your own selectors and use them within the selector containers by specifying
them within the <code>&lt;custom&gt;</code> tag.</p>

<p>First, you have to write your selector class in Java. The only requirement it must meet
in order to be a selector is that it implements
the <code>org.apache.tools.ant.types.selectors.FileSelector</code> interface, which contains
a single method. See <a href="selectors-program.html">Programming Selectors in Ant</a> for
more information.</p>
<p>First, you have to write your selector class in Java. The only requirement it must meet in
order to be a selector is that it implements
the <code>org.apache.tools.ant.types.selectors.FileSelector</code> interface, which contains a
single method. See <a href="selectors-program.html">Programming Selectors in Ant</a> for more
information.</p>

<p>Once that is written, you include it in your build file by using
the <code>&lt;custom&gt;</code> tag.</p>
@@ -1340,15 +1335,15 @@
<tr>
<td>classpath</td>
<td>The classpath to use in order to load the custom selector class. If
neither <var>classpath</var> nor <var>classpathref</var> are specified, the class will
be loaded from the classpath that Ant uses.</td>
neither <var>classpath</var> nor <var>classpathref</var> are specified, the class will be
loaded from the classpath that Ant uses.</td>
<td>No</td>
</tr>
<tr>
<td>classpathref</td>
<td>A reference to a classpath previously defined. If neither <var>classpathref</var>
nor <var>classpath</var> are specified, the class will be loaded from the classpath that
Ant uses.</td>
nor <var>classpath</var> are specified, the class will be loaded from the classpath that Ant
uses.</td>
<td>No</td>
</tr>
</table>


+ 26
- 31
manual/Types/tarfileset.html View File

@@ -26,20 +26,19 @@
<p><code>TarFileSet</code> has been a stand-alone type <em>since Apache Ant 1.7</em>.</p>

<p>A <code>&lt;tarfileset&gt;</code> is a special form of
a <code>&lt;<a href="fileset.html">fileset</a>&gt;</code> which can behave in 2 different
ways:</p>
a <code>&lt;<a href="fileset.html">fileset</a>&gt;</code> which can behave in 2 different ways:</p>
<ul>
<li>When the <var>src</var> attribute is used&mdash;or a nested resource collection has been
specified, the tarfileset is populated with tar entries found in the file <var>src</var>.</li>
<li>When the <var>dir</var> attribute is used, the tarfileset is populated with filesystem
files found under <var>dir</var>.</li>
<li>When the <var>dir</var> attribute is used, the tarfileset is populated with filesystem files
found under <var>dir</var>.</li>
</ul>
<p><code>&lt;tarfileset&gt;</code> supports all attributes
of <code>&lt;<a href="fileset.html">fileset</a>&gt;</code> in addition to those listed below.
Note that tar archives in general don't contain entries with leading slashes so you shouldn't
use include/exclude patterns that start with slashes either.</p>
<p><em>Since Ant 1.7</em>, a tarfileset can be defined with the <var>id</var> attribute and
referred to with the <var>refid</var> attribute.</p>
of <code>&lt;<a href="fileset.html">fileset</a>&gt;</code> in addition to those listed below. Note
that tar archives in general don't contain entries with leading slashes so you shouldn't use
include/exclude patterns that start with slashes either.</p>
<p><em>Since Ant 1.7</em>, a tarfileset can be defined with the <var>id</var> attribute and referred
to with the <var>refid</var> attribute.</p>
<h3>Parameters</h3>
<table class="attr">
<tbody>
@@ -55,14 +54,13 @@ referred to with the <var>refid</var> attribute.</p>
</tr>
<tr>
<td>fullpath</td>
<td>the file described by the fileset is placed at that exact location in the
archive.</td>
<td>the file described by the fileset is placed at that exact location in the archive.</td>
<td>No</td>
</tr>
<tr>
<td>src</td>
<td>may be used in place of the <var>dir</var> attribute to specify a tar file whose
contents will be extracted and included in the archive.</td>
<td>may be used in place of the <var>dir</var> attribute to specify a tar file whose contents
will be extracted and included in the archive.</td>
<td>No</td>
</tr>
<tr>
@@ -100,18 +98,16 @@ referred to with the <var>refid</var> attribute.</p>
</tr>
<tr>
<td>erroronmissingarchive</td>
<td>Specify what happens if the archive does not exist. If <q>true</q>, a build error
will happen; if <q>false</q>, the fileset will be ignored/empty.
<em>Since Ant 1.8.0</em></td>
<td>Specify what happens if the archive does not exist. If <q>true</q>, a build error will
happen; if <q>false</q>, the fileset will be ignored/empty. <em>Since Ant 1.8.0</em></td>
<td>No; defaults to <q>true</q></td>
</tr>
<tr>
<td>encoding</td>
<td>The character encoding to use for filenames inside the zip file. For a list of
possible values see
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html">Supported
Encodings</a>.
<em>Since Ant 1.9.5</em></td>
<td>The character encoding to use for filenames inside the zip file. For a list of possible
values see
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html"
target="_top">Supported Encodings</a>. <em>Since Ant 1.9.5</em></td>
<td>No; defaults to default JVM character encoding</td>
</tr>
</tbody>
@@ -119,12 +115,12 @@ referred to with the <var>refid</var> attribute.</p>
<p>The <var>fullpath</var> attribute can only be set for filesets that represent a single
file. The <var>prefix</var> and <var>fullpath</var> attributes cannot both be set on the same
fileset.</p>
<p>When using the <var>src</var> attribute, <var>include</var> and <var>exclude</var> patterns
may be used to specify a subset of the archive for inclusion in the archive as with
the <var>dir</var> attribute.</p>
<p>When using the <var>src</var> attribute, <var>include</var> and <var>exclude</var> patterns may
be used to specify a subset of the archive for inclusion in the archive as with the <var>dir</var>
attribute.</p>

<p>Please note that currently only the <a href="../Tasks/tar.html">tar</a> task uses the
permission and ownership attributes.</p>
<p>Please note that currently only the <a href="../Tasks/tar.html">tar</a> task uses the permission
and ownership attributes.</p>

<h3>Parameters specified as nested elements</h3>

@@ -143,11 +139,10 @@ permission and ownership attributes.</p>
&lt;/tarfileset&gt;
&lt;/copy&gt;</pre>

<p>downloads the archive <samp>some-archive.tar.bz2</samp>, uncompresses and extracts it on the
fly, copies the contents of the <samp>lib</samp> directory into <samp>some-dir</samp> and
discards the rest of the archive. File timestamps will be compared between the archive's
entries and files inside the target directory, no files get overwritten unless they are
out-of-date.</p>
<p>downloads the archive <samp>some-archive.tar.bz2</samp>, uncompresses and extracts it on the fly,
copies the contents of the <samp>lib</samp> directory into <samp>some-dir</samp> and discards the
rest of the archive. File timestamps will be compared between the archive's entries and files
inside the target directory, no files get overwritten unless they are out-of-date.</p>

</body>
</html>

+ 57
- 61
manual/Types/xmlcatalog.html View File

@@ -26,23 +26,22 @@

<h2 id="XMLCatalog">XMLCatalog</h2>

<p>An XMLCatalog is a catalog of public resources such as DTDs or entities that are referenced
in an XML document. Catalogs are typically used to make web references to resources point to a
locally cached copy of the resource.</p>
<p>An XMLCatalog is a catalog of public resources such as DTDs or entities that are referenced in an
XML document. Catalogs are typically used to make web references to resources point to a locally
cached copy of the resource.</p>

<p>This allows the XML Parser, XSLT Processor or other consumer of XML documents to efficiently
allow a local substitution for a resource available on the web.</p>
<p><strong>Note:</strong> This task <em>uses, but does not depend on</em> external libraries not
included in the Apache Ant distribution.
See <a href="../install.html#librarydependencies">Library Dependencies</a> for more
information.</p>
included in the Apache Ant distribution. See <a href="../install.html#librarydependencies">Library
Dependencies</a> for more information.</p>
<p>This data type provides a catalog of resource locations based on
the <a href="https://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html">OASIS
XML Catalog standard</a>. The catalog entries are used both for Entity resolution and URI
resolution, in accordance with the <code>org.xml.sax.EntityResolver</code>
the <a href="https://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html"
target="_top">OASIS XML Catalog standard</a>. The catalog entries are used both for Entity
resolution and URI resolution, in accordance with the <code>org.xml.sax.EntityResolver</code>
and <code>javax.xml.transform.URIResolver</code> interfaces as defined in
the <a href="https://download.oracle.com/otn-pub/jcp/jaxp-1_6-mrel3-spec/JAXP1_6-FinalSpec.pdf">Java
API for XML Processing (JAXP) Specification</a>.</p>
the <a href="https://download.oracle.com/otn-pub/jcp/jaxp-1_6-mrel3-spec/JAXP1_6-FinalSpec.pdf"
target="_top">Java API for XML Processing (JAXP) Specification</a>.</p>
<p>For example, in a <code>web.xml</code> file, the DTD is referenced as:</p>
<pre>
&lt;!DOCTYPE web-app PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN&quot;
@@ -75,64 +74,62 @@ the system classpath is used for this as well.</p>
<p>XMLCatalogs can also be nested inside other XMLCatalogs. For example, a "superset"
XMLCatalog could be made by including several nested XMLCatalogs that referred to other,
previously defined XMLCatalogs.</p>
<p>Resource locations can be specified either in-line or in external catalog file(s), or both.
In order to use an external catalog file, the xml-commons resolver library
(<samp>resolver.jar</samp>) must be in your path. External catalog files may be
either <a href="https://oasis-open.org/committees/entity/background/9401.html">plain text
format</a> or <a href="https://www.oasis-open.org/committees/entity/spec-2001-08-06.html">XML
format</a>. If the xml-commons resolver library is not found in the classpath, external catalog
files, specified in <code>catalogpath</code>, will be ignored and a warning will be logged. In
this case, however, processing of inline entries will proceed normally.</p>
<p>Resource locations can be specified either in-line or in external catalog file(s), or both. In
order to use an external catalog file, the xml-commons resolver library (<samp>resolver.jar</samp>)
must be in your path. External catalog files may be
either <a href="https://oasis-open.org/committees/entity/background/9401.html" target="_top">plain
text format</a> or <a href="https://www.oasis-open.org/committees/entity/spec-2001-08-06.html"
target="_top">XML format</a>. If the xml-commons resolver library is not found in the classpath,
external catalog files, specified in <code>catalogpath</code>, will be ignored and a warning will be
logged. In this case, however, processing of inline entries will proceed normally.</p>
<p>Currently, only <code>&lt;dtd&gt;</code> and <code>&lt;entity&gt;</code> elements may be
specified inline; these roughly correspond to OASIS catalog entry types <code>PUBLIC</code>
and <code>URI</code> respectively. By contrast, external catalog files may use any of the entry
types defined in
the <a href="https://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html">OASIS
specification</a>.</p>
the <a href="https://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html"
target="_top">OASIS specification</a>.</p>
<h3 id="ResolverAlgorithm">Entity/DTD/URI resolution algorithm</h3>
<p>When an entity, DTD, or URI is looked up by the XML processor, the XMLCatalog searches its
list of entries to see if any match. That is, it attempts to match the <var>publicId</var>
attribute of each entry with the PublicID or URI of the entity to be resolved. Assuming a
matching entry is found, XMLCatalog then executes the following steps:</p>
<p>When an entity, DTD, or URI is looked up by the XML processor, the XMLCatalog searches its list
of entries to see if any match. That is, it attempts to match the <var>publicId</var> attribute of
each entry with the PublicID or URI of the entity to be resolved. Assuming a matching entry is
found, XMLCatalog then executes the following steps:</p>

<h4>1. Filesystem lookup</h4>

<p>The <var>location</var> is first looked up in the filesystem. If the <var>location</var> is
a relative path, the Ant project <var>basedir</var> attribute is used as the base directory. If
the <var>location</var> specifies an absolute path, it is used as is. Once we have an absolute
path in hand, we check to see if a valid and readable file exists at that path. If so, we are
done. If not, we proceed to the next step.</p>
<p>The <var>location</var> is first looked up in the filesystem. If the <var>location</var> is a
relative path, the Ant project <var>basedir</var> attribute is used as the base directory. If
the <var>location</var> specifies an absolute path, it is used as is. Once we have an absolute path
in hand, we check to see if a valid and readable file exists at that path. If so, we are done. If
not, we proceed to the next step.</p>

<h4>2. Classpath lookup</h4>

<p>The <var>location</var> is next looked up in the classpath. Recall that jar files are merely
fancy zip files. For classpath lookup, the <var>location</var> is used as is (no base is
prepended). We use a Classloader to attempt to load the resource from the classpath. For
example, if <samp>hello.jar</samp> is in the classpath and it
contains <samp>foo/bar/blat.dtd</samp> it will resolve an entity whose <var>location</var>
is <samp>foo/bar/blat.dtd</samp>. Of course, it will <em>not</em> resolve an entity
whose <var>location</var> is <code>blat.dtd</code>.</p>
prepended). We use a Classloader to attempt to load the resource from the classpath. For example,
if <samp>hello.jar</samp> is in the classpath and it contains <samp>foo/bar/blat.dtd</samp> it will
resolve an entity whose <var>location</var> is <samp>foo/bar/blat.dtd</samp>. Of course, it
will <em>not</em> resolve an entity whose <var>location</var> is <code>blat.dtd</code>.</p>

<h4>3a. Apache xml-commons resolver lookup</h4>

<p>What happens next depends on whether the resolver library from xml-commons is available on
the classpath. If so, we defer all further attempts at resolving to it. The resolver library
supports extremely sophisticated functionality like URL rewriting and so on, which can be
accessed by making the appropriate entries in external catalog files (XMLCatalog does not yet
provide inline support for all of the entries defined in
the <a href="https://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html">OASIS
standard</a>).</p>
<p>What happens next depends on whether the resolver library from xml-commons is available on the
classpath. If so, we defer all further attempts at resolving to it. The resolver library supports
extremely sophisticated functionality like URL rewriting and so on, which can be accessed by making
the appropriate entries in external catalog files (XMLCatalog does not yet provide inline support
for all of the entries defined in
the <a href="https://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html"
target="_top">OASIS standard</a>).</p>

<h4>3. URL-space lookup</h4>

<p>Finally, we attempt to make a URL out of the <var>location</var>. At first this may seem
like this would defeat the purpose of XMLCatalogs&mdash;why go back out to the internet? But in
fact, this can be used to (in a sense) implement HTTP redirects, substituting one URL for
another. The mapped-to URL might also be served by a local web server. If the URL resolves to
a valid and readable resource, we are done. Otherwise, we give up. In this case, the XML
processor will perform its normal resolution algorithm. Depending on the processor
configuration, further resolution failures may or may not result in fatal (i.e. build-ending)
errors.</p>
<p>Finally, we attempt to make a URL out of the <var>location</var>. At first this may seem like
this would defeat the purpose of XMLCatalogs&mdash;why go back out to the internet? But in fact,
this can be used to (in a sense) implement HTTP redirects, substituting one URL for another. The
mapped-to URL might also be served by a local web server. If the URL resolves to a valid and
readable resource, we are done. Otherwise, we give up. In this case, the XML processor will
perform its normal resolution algorithm. Depending on the processor configuration, further
resolution failures may or may not result in fatal (i.e. build-ending) errors.</p>

<h3>XMLCatalog attributes</h3>
<table class="attr">
@@ -173,26 +170,25 @@ identical in their structure</p>
</tr>
<tr>
<td>location</td>
<td>The location of the local replacement to be used for the public identifier
specified. This may be specified as a file name, resource name found on the classpath, or a
URL. Relative paths will be resolved according to the base, which by default is the Ant
<td>The location of the local replacement to be used for the public identifier specified. This
may be specified as a file name, resource name found on the classpath, or a URL. Relative paths
will be resolved according to the base, which by default is the Ant
project <var>basedir</var>.</td>
<td>Yes</td>
</tr>
</table>
<h4>classpath</h4>
<p>The classpath to use for <a href="#ResolverAlgorithm">entity resolution</a>. The
nested <code>&lt;classpath&gt;</code> is a <a href="../using.html#path">path</a>-like
structure.</p>
nested <code>&lt;classpath&gt;</code> is a <a href="../using.html#path">path</a>-like structure.</p>
<h4>catalogpath</h4>
<p>The nested <code>catalogpath</code> element is a <a href="../using.html#path">path</a>-like
structure listing catalog files to search. All files in this path are assumed to be OASIS
catalog files, in
either <a href="https://oasis-open.org/committees/entity/background/9401.html">plain text
format</a> or <a href="https://www.oasis-open.org/committees/entity/spec-2001-08-06.html">XML
structure listing catalog files to search. All files in this path are assumed to be OASIS catalog
files, in either <a href="https://oasis-open.org/committees/entity/background/9401.html"
target="_top">plain text format</a>
or <a href="https://www.oasis-open.org/committees/entity/spec-2001-08-06.html" target="_top">XML
format</a>. Entries specifying nonexistent files will be ignored. If the resolver library from
xml-commons is not available in the classpath, all <code>catalogpath</code>s will be ignored and
a warning will be logged.</p>
xml-commons is not available in the classpath, all <code>catalogpath</code>s will be ignored and a
warning will be logged.</p>
<h3>Examples</h3>
<p>Set up an XMLCatalog with a single DTD referenced locally in a user's home directory:</p>
<pre>


+ 19
- 23
manual/Types/zipfileset.html View File

@@ -24,22 +24,21 @@
<h2 id="fileset">ZipFileSet</h2>

<p>A <code>&lt;zipfileset&gt;</code> is a special form of
a <code>&lt;<a href="fileset.html">fileset</a>&gt;</code> which can behave in 2 different
ways:</p>
a <code>&lt;<a href="fileset.html">fileset</a>&gt;</code> which can behave in 2 different ways:</p>
<ul>
<li>When the <var>src</var> attribute is used&mdash;or a nested resource collection has been
specified (<em>since Apache Ant 1.7</em>), the zipfileset is populated with zip entries found
in the file <var>src</var>.</li>
<li>When the <var>dir</var> attribute is used, the zipfileset is populated with filesystem
files found under <var>dir</var>.</li>
specified (<em>since Apache Ant 1.7</em>), the zipfileset is populated with zip entries found in
the file <var>src</var>.</li>
<li>When the <var>dir</var> attribute is used, the zipfileset is populated with filesystem files
found under <var>dir</var>.</li>
</ul>
<p><code>&lt;zipfileset&gt;</code> supports all attributes
of <code>&lt;<a href="fileset.html">fileset</a>&gt;</code> in addition to those listed below.
Note that zip archives in general don't contain entries with leading slashes so you shouldn't
of <code>&lt;<a href="fileset.html">fileset</a>&gt;</code> in addition to those listed below. Note
that zip archives in general don't contain entries with leading slashes so you shouldn't
use <var>includes</var>/<var>excludes</var> patterns that start with slashes either.</p>

<p><em>Since Ant 1.6</em>, a zipfileset can be defined with the <var>id</var> attribute and
referred to with the <var>refid</var> attribute.</p>
<p><em>Since Ant 1.6</em>, a zipfileset can be defined with the <var>id</var> attribute and referred
to with the <var>refid</var> attribute.</p>

<h3>Parameters</h3>
<table class="attr">
@@ -61,37 +60,34 @@ referred to with the <var>refid</var> attribute.</p>
</tr>
<tr>
<td>src</td>
<td>may be used in place of the <var>dir</var> attribute to specify a zip file whose
contents will be extracted and included in the archive.</td>
<td>may be used in place of the <var>dir</var> attribute to specify a zip file whose contents
will be extracted and included in the archive.</td>
<td>No</td>
</tr>
<tr>
<td>filemode</td>
<td>A 3 digit octal string, specify the user, group and other modes in the standard Unix
fashion. Only applies to plain files. <em>Since Ant 1.5.2</em></td>
fashion. Only applies to plain files. <em>Since Ant 1.5.2</em></td>
<td>No; default is <q>644</q></td>
</tr>
<tr>
<td>dirmode</td>
<td>A 3 digit octal string, specify the user, group and other modes in the standard Unix
fashion. Only applies to directories. <em>Since Ant 1.5.2</em></td>
fashion. Only applies to directories. <em>Since Ant 1.5.2</em></td>
<td>No; default is <q>755</q></td>
</tr>
<tr>
<td>encoding</td>
<td>The character encoding to use for filenames inside the zip file. For a list of
possible values see
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html">Supported
Encodings</a>.
<td>The character encoding to use for filenames inside the zip file. For a list of possible
values see
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html"
target="_top">Supported Encodings</a>.
<td>No; defaults to default JVM character encoding</td>
</tr>
<tr>
<td>erroronmissingarchive</td>
<td>
Specify what happens if the archive does not exist. If <q>true</q>, a build error will
happen; if <q>false</q>, the fileset will be ignored/empty.
<em>Since Ant 1.8.0</em>
</td>
<td>Specify what happens if the archive does not exist. If <q>true</q>, a build error will
happen; if <q>false</q>, the fileset will be ignored/empty. <em>Since Ant 1.8.0</em></td>
<td>No; defaults to <q>true</q></td>
</tr>
</tbody>


+ 6
- 7
manual/api/index.html View File

@@ -22,14 +22,13 @@
<body>
<h2>Apache Ant API has not been generated</h2>

<p>If you see this page online
at <a href="https://ant.apache.org/">ant.apache.org</a>, it is not a bug, but
on purpose. We do not provide an online version of the API docs, they
are included with all our distributions.</p>
<p>If you see this page online at <a target="_top"
href="https://ant.apache.org/">ant.apache.org</a>, it is not a bug, but on purpose. We do not
provide an online version of the API docs, they are included with all our distributions.</p>

<p>Ant's manual and API documentation is part of
the <a href="https://ant.apache.org/bindownload.cgi">binary</a>
distributions or available as a
separate <a href="https://ant.apache.org/manualdownload.cgi">archive</a>.</p>
the <a href="https://ant.apache.org/bindownload.cgi" target="_top">binary</a> distributions or
available as a separate <a href="https://ant.apache.org/manualdownload.cgi"
target="_top">archive</a>.</p>
</body>
</html>

+ 12
- 14
manual/cover.html View File

@@ -25,22 +25,20 @@
<body>
<h1 class="center"><img src="images/ant_logo_large.gif" width="190" height="120"></h1>
<h1 class="center">Apache Ant&trade; 1.10.3 Manual</h1>
<p>This is the manual for version 1.10.3
of <a target="_top" href="https://ant.apache.org/">Apache Ant</a>. If your version
of Ant (as verified with <code>ant -version</code>) is older or newer
than this version then this is not the correct manual set. Please
use the documentation appropriate to your current version. Also,
if you are using a version older than the most recent release, we
recommend an upgrade to fix bugs as well as provide new functionality.</p>
<p>This is the manual for version 1.10.3 of <a href="https://ant.apache.org/" target="_top">Apache Ant</a>. If your
version of Ant (as verified with <code>ant -version</code>) is older or newer than this version then this is not the
correct manual set. Please use the documentation appropriate to your current version. Also, if you are using a
version older than the most recent release, we recommend an upgrade to fix bugs as well as provide new
functionality.</p>

<p>Ant's manual and API documentation is part of
the <a href="https://ant.apache.org/bindownload.cgi">binary</a>
distributions or available as a
separate <a href="https://ant.apache.org/manualdownload.cgi">archive</a>.
Manuals for older releases are available for
download <a href="https://ant.apache.org/bindownload.cgi#Old Ant Releases">as well</a>.</p>
<p>Ant's manual and API documentation is part of the <a href="https://ant.apache.org/bindownload.cgi"
target="_top">binary</a> distributions or available as a
separate <a href="https://ant.apache.org/manualdownload.cgi" target="_top">archive</a>. Manuals for older releases
are available for download <a href="https://ant.apache.org/bindownload.cgi#Old Ant Releases" target="_top">as
well</a>.</p>

<p class="center">Apache Ant, Apache Ivy, Ant, Ivy, Apache, the Apache feather logo, and the Apache Ant project logos are trademarks of The Apache Software Foundation.</p>
<p class="center">Apache Ant, Apache Ivy, Ant, Ivy, Apache, the Apache feather logo, and the Apache Ant project logos
are trademarks of The Apache Software Foundation.</p>

</body>
</html>

+ 6
- 6
manual/develop.html View File

@@ -473,13 +473,13 @@ public class MyLogAdapter implements BuildListener {
positively encouraged. Both changes to the existing source and new tasks can be incorporated back
into the Ant codebase, which benefits all users and spreads the maintenance load around.</p>

<p>Please consult the <a href="https://www.apache.org/foundation/getinvolved.html">Getting
Involved</a> pages on the Apache web site for details on how to fetch the latest source and how to
submit changes for reincorporation into the source tree.</p>
<p>Please consult the <a href="https://www.apache.org/foundation/getinvolved.html"
target="_top">Getting Involved</a> pages on the Apache web site for details on how to fetch the
latest source and how to submit changes for reincorporation into the source tree.</p>

<p>Ant also has some <a href="https://ant.apache.org/ant_task_guidelines.html">task guidelines</a>
which provides some advice to people developing and testing tasks. Even if you intend to keep your
tasks to yourself, you should still read this as it should be informative.</p>
<p>Ant also has some <a href="https://ant.apache.org/ant_task_guidelines.html" target="_top">task
guidelines</a> which provides some advice to people developing and testing tasks. Even if you intend
to keep your tasks to yourself, you should still read this as it should be informative.</p>

</body>
</html>

+ 2
- 2
manual/developlist.html View File

@@ -30,8 +30,8 @@
<h3>Developing with Apache Ant</h3>

<ul class="inlinelist">
<li><a href="https://ant.apache.org/ant_in_anger.html">Ant in Anger</a> <small>(online)</small></li>
<li><a href="https://ant.apache.org/ant_task_guidelines.html">Ant Task Guidelines</a> <small>(online)</small></li>
<li><a href="https://ant.apache.org/ant_in_anger.html" target="_top">Ant in Anger</a> <small>(online)</small></li>
<li><a href="https://ant.apache.org/ant_task_guidelines.html" target="_top">Ant Task Guidelines</a> <small>(online)</small></li>
<li><a href="develop.html#writingowntask">Writing Your Own Task</a></li>
<li><a href="base_task_classes.html">Tasks Designed for Extension</a></li>
<li><a href="develop.html#buildevents">Build Events</a></li>


+ 32
- 33
manual/feedback.html View File

@@ -25,45 +25,44 @@
<body>

<h1 id="feedback">Feedback and Troubleshooting</h1>
<p>If things do not work, especially simple things like <code>ant -version</code>,
then something is wrong with your configuration. Before filing bug reports and
emailing all the Apache Ant mailing lists</p>
<p>If things do not work, especially simple things like <code>ant -version</code>, then something is
wrong with your configuration. Before filing bug reports and emailing all the Apache Ant mailing
lists</p>
<ol>
<li>Check your environment variables. Are <code>ANT_HOME</code> and <code>JAVA_HOME</code> correct? If
they have quotes or trailing slashes, remove them.</li>
<li>Unset <code>CLASSPATH</code>; if that is wrong things go horribly wrong. Ant does not
need the <code>CLASSPATH</code> variable defined to anything to work.</li>
<li>Make sure there are no versions of <samp>crimson.jar</samp> or other XML parsers in <samp>JAVA_HOME/jre/lib/ext</samp></li>
<li>Check your environment variables. Are <code>ANT_HOME</code> and <code>JAVA_HOME</code>
correct? If they have quotes or trailing slashes, remove them.</li>
<li>Unset <code>CLASSPATH</code>; if that is wrong things go horribly wrong. Ant does not need
the <code>CLASSPATH</code> variable defined to anything to work.</li>
<li>Make sure there are no versions of <samp>crimson.jar</samp> or other XML parsers
in <samp>JAVA_HOME/jre/lib/ext</samp></li>
<li>Is your path correct? is Ant on it? What about <samp>JAVA_HOME/bin</samp>? have you tested
this? If you are using Jikes, is it on the path? A CreateProcess error (especially
with <code>error=2</code>) on Windows usually means executable not found on the path.</li>
<li>Which version of ant are you running? Other applications distribute a copy
-it may be being picked up by accident.</li>
<li>If a task failing to run is from <samp>optional.jar</samp> in <samp>ANT_HOME/lib</samp>? Are there any
libraries which it depends on missing?</li>
<li>If a task doesn't do what you expect, run <code>ant -verbose</code> or <code>ant
-debug</code> to see what is happening</li>
<li>Which version of ant are you running? Other applications distribute a copy&mdash;it may be
being picked up by accident.</li>
<li>If a task failing to run is from <samp>optional.jar</samp> in <samp>ANT_HOME/lib</samp>? Are
there any libraries which it depends on missing?</li>
<li>If a task doesn't do what you expect, run <code>ant -verbose</code> or <code>ant -debug</code>
to see what is happening</li>
</ol>
<p>If you can't fix your problem, start with the <a href="https://ant.apache.org/mail.html" target="_top">Ant
User Mailing List</a>. These are other ant users who will help you learn to
use ant. If they cannot fix it then someone may suggest filing a bug report,
which will escalate the issue. Remember of course, that support, like all open
source development tasks, is voluntary. If you haven't invested time in helping
yourself by following the steps above, it is unlikely that anyone will invest
the time in helping you.</p>
<p>Also, if you don't understand something, the <a href="https://ant.apache.org/mail.html" target="_top">Ant
User Mailing List</a> is the place to ask questions. Not the developer list,
nor the individuals whose names appears in the source and documentation. If
they answered all such emails, nobody would have any time to improve Ant.</p>
<p>To provide feedback on this software, please subscribe to the <a href="https://ant.apache.org/mail.html" target="_top">Ant
User Mailing List</a></p>
<p>If you want to contribute to Ant or stay current with the latest
development, join
<p>If you can't fix your problem, start with the <a href="https://ant.apache.org/mail.html"
target="_top">Ant User Mailing List</a>. These are other ant users who will help you learn to use
ant. If they cannot fix it then someone may suggest filing a bug report, which will escalate the
issue. Remember of course, that support, like all open source development tasks, is voluntary. If
you haven't invested time in helping yourself by following the steps above, it is unlikely that
anyone will invest the time in helping you.</p>
<p>Also, if you don't understand something, the <a href="https://ant.apache.org/mail.html"
target="_top">Ant User Mailing List</a> is the place to ask questions. Not the developer list, nor
the individuals whose names appears in the source and documentation. If they answered all such
emails, nobody would have any time to improve Ant.</p>
<p>To provide feedback on this software, please subscribe to
the <a href="https://ant.apache.org/mail.html" target="_top">Ant User Mailing List</a></p>
<p>If you want to contribute to Ant or stay current with the latest development, join
the <a href="https://ant.apache.org/mail.html" target="_top">Ant Development Mailing List</a></p>
<p>A searchable archive can be found
at <a href="https://marc.info" target="_top">https://marc.info</a>. Other
archives will be documented online
at <a href="https://ant.apache.org/mail.html#Archives" target="_top">Mailing Lists Archives</a></p>
<p>A searchable archive can be found at <a href="https://marc.info"
target="_top">https://marc.info</a>. Other archives will be documented online
at <a href="https://ant.apache.org/mail.html#Archives" target="_top">Mailing Lists
Archives</a></p>

</body>
</html>

+ 20
- 18
manual/ide.html View File

@@ -34,38 +34,40 @@ All the modern Java IDEs support Apache Ant almost out of the box.

<ul>
<li>
<a href="Integration/jext-plugin.html">AntWork Plugin for the Jext Java Text Editor (unbundled)</a>
<a href="Integration/jext-plugin.html">AntWork Plugin for the Jext Java Text Editor
(unbundled)</a>
</li>
<li>
<a href="http://jdee.sourceforge.net/">JDEE (Java Development Environment for Emacs)</a>
has built-in text Ant integration: selection of target through text
field, execution, hyperlink to compilation errors. Installation: built-in
JDEE 2.2.8 or later. Configuration: through customize menu
"Jde Build Function"
<a href="http://jdee.sourceforge.net/" target="_top">JDEE (Java Development Environment for
Emacs)</a> has built-in text Ant integration: selection of target through text field, execution,
hyperlink to compilation errors. Installation: built-in JDEE 2.2.8 or later. Configuration:
through customize menu "Jde Build Function"
</li>
<li>
<a href="https://www.jetbrains.com/idea/">IDEA</a> has built-in
GUI ANT integration: GUI selection of targets, execution, hyperlink to compilation errors
<a href="https://www.jetbrains.com/idea/" target="_top">IDEA</a> has built-in GUI ANT
integration: GUI selection of targets, execution, hyperlink to compilation errors
</li>
<li>
<a href="http://ant.netbeans.org/">NetBeans</a>
IDE uses Ant as the basis for its project system starting with the 4.0 release
<a href="http://ant.netbeans.org/" target="_top">NetBeans</a> IDE uses Ant as the basis for its
project system starting with the 4.0 release
</li>
<li>
<a href="http://jedit.org/">jEdit</a>
is an open source Java IDE with some great plugins for Java dev, a
good XML editor and the Antfarm plugin to execute targets in a build file
<a href="http://jedit.org/" target="_top">jEdit</a> is an open source Java IDE with some great
plugins for Java dev, a good XML editor and the Antfarm plugin to execute targets in a build
file
</li>
<li>
<a href="https://eclipse.org/">Eclipse</a>
is IBM's counterpoint to NetBeans; an open source IDE with Java and Ant support
<a href="https://eclipse.org/" target="_top">Eclipse</a> is IBM's counterpoint to NetBeans; an
open source IDE with Java and Ant support
</li>
<li>
<a href="http://www.placidsystems.com/virtualant/">Virtual Ant</a>
GUI allows you to work on a Virtual File System without dealing with the XML; plugs into Eclipse, Netbeans &amp; IntelliJ
<a href="http://www.placidsystems.com/virtualant/" target="_top">Virtual Ant</a> GUI allows you
to work on a Virtual File System without dealing with the XML; plugs into Eclipse, Netbeans
&amp; IntelliJ
</li>
<li>
<a href="https://www.ibm.com/developerworks/offers/wsad2.html">WebSphere Studio Application Developer</a>
<a href="https://www.ibm.com/developerworks/offers/wsad2.html" target="_top">WebSphere Studio
Application Developer</a>
</li>
</ul>



+ 12
- 14
manual/install.html View File

@@ -169,21 +169,21 @@ target="_top">https://archive.apache.org/dist/ant/</a>. The files are organized
<td><samp>ant-current-*.asc</samp></td>
<td>
Security file for checking the correctness of the zip file. This one is
the <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy" target="_blank">PGP</a> signature.
the <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy" target="_top">PGP</a> signature.
</td>
</tr>
<tr>
<td><samp>ant-current-*.md5</samp></td>
<td>
Security file for checking the correctness of the zip file. This one is
the <a href="https://en.wikipedia.org/wiki/Md5" target="_blank">MD5</a> checksum.
the <a href="https://en.wikipedia.org/wiki/Md5" target="_top">MD5</a> checksum.
</td>
</tr>
<tr>
<td><samp>ant-current-*.sha1</samp></td>
<td>
Security file for checking the correctness of the zip file. This one is
the <a href="https://en.wikipedia.org/wiki/SHA-1" target="_blank">SHA1</a> checksum.
the <a href="https://en.wikipedia.org/wiki/SHA-1" target="_top">SHA1</a> checksum.
</td>
</tr>
<tr>
@@ -241,7 +241,7 @@ The more up-to-date the version of Java, the more Ant tasks you get.

<h3>Open Source Java Runtimes</h3>
<p>
The Ant team strongly supports users running Ant on <a target="_blank" href="http://openjdk.java.net/">OpenJDK</a> and
The Ant team strongly supports users running Ant on <a href="http://openjdk.java.net/" target="_top">OpenJDK</a> and
other open source Java runtimes, and so strives to have a product that works well on those platforms.
</p>

@@ -665,8 +665,8 @@ installed. See <a href="#installing">Installing Ant</a> for examples on how to d
</p>

<p>
<strong>Note</strong>: The bootstrap process of Ant requires a greedy compiler like OpenJDK or Oracle's javac. It does not work
with gcj or kjc.
<strong>Note</strong>: The bootstrap process of Ant requires a greedy compiler like OpenJDK or Oracle's javac. It does
not work with gcj or kjc.
</p>

<p>
@@ -684,8 +684,8 @@ on how to do this.
</p>

<p>
<em>Since Ant 1.7.0</em>, Ant has a hard dependency on JUnit. The <samp>fetch.xml</samp> build script will download JUnit
automatically, but if you don't use this you must install it manually into <samp>lib/optional</samp> (download it
<em>Since Ant 1.7.0</em>, Ant has a hard dependency on JUnit. The <samp>fetch.xml</samp> build script will download
JUnit automatically, but if you don't use this you must install it manually into <samp>lib/optional</samp> (download it
from <a href="https://junit.org/" target="_top">JUnit.org</a>) if you are using a source distribution of Ant.
</p>

@@ -708,7 +708,7 @@ The above action does the following:
<li>If necessary it will bootstrap the Ant code. Bootstrapping involves the manual compilation of enough Ant code to be
able to run Ant. The bootstrapped Ant is used for the remainder of the build steps.</li>
<li>Invokes the bootstrapped Ant with the parameters passed to the build script. In this case, these parameters define
an Ant property value and specify the &quot;dist&quot; target in Ant's own <samp>build.xml</samp> file.</li>
an Ant property value and specify the <q>dist</q> target in Ant's own <samp>build.xml</samp> file.</li>
<li>Create the <samp>ant.jar</samp> and <samp>ant-launcher.jar</samp> JAR files</li>
<li>Create optional JARs for which the build had the relevant libraries. If a particular library is missing
from <samp>lib/optional</samp>, then the matching ant-library JAR file will not be created. For
@@ -876,7 +876,7 @@ these tasks available. Please refer to the <a href="#optionalTasks">Installing A
and <a href="Tasks/telnet.html">telnet</a> tasks<br/> A minimum version of commons-net of 1.4.0 is needed to
compile Ant, earlier versions did not support the full range of configuration options.<br/>jakarta-oro 2.0.8 is
required together with commons-net 1.4.x at run time.<br/><strong>Note</strong>: do not use commons-net 3.2
because of <a href="https://issues.apache.org/jira/browse/NET-493">performance issues</a>
because of <a href="https://issues.apache.org/jira/browse/NET-493" target="_top">performance issues</a>
</td>
<td><a href="https://commons.apache.org/net/" target="_top">https://commons.apache.org/net/</a></td>
</tr>
@@ -890,8 +890,7 @@ these tasks available. Please refer to the <a href="#optionalTasks">Installing A
<td>javax.mail-api.jar</td>
<td><a href="Tasks/mail.html">mail</a> task with MIME encoding,
and <em><u>deprecated</u></em> <a href="Tasks/mimemail.html">mimemail</a> task</td>
<td><a href="https://javaee.github.io/javamail/"
target="_top">https://javaee.github.io/javamail/</a></td>
<td><a href="https://javaee.github.io/javamail/" target="_top">https://javaee.github.io/javamail/</a></td>
</tr>
<tr>
<td>activation.jar<br/>(included in Java 6 and later runtime)</td>
@@ -903,8 +902,7 @@ these tasks available. Please refer to the <a href="#optionalTasks">Installing A
<tr>
<td>jdepend.jar</td>
<td><a href="Tasks/jdepend.html">jdepend</a> task</td>
<td><a href="https://github.com/clarkware/jdepend"
target="_top">https://github.com/clarkware/jdepend</a></td>
<td><a href="https://github.com/clarkware/jdepend" target="_top">https://github.com/clarkware/jdepend</a></td>
</tr>
<tr>
<td>resolver.jar <strong>1.1 or later</strong></td>


+ 110
- 135
manual/listeners.html View File

@@ -27,8 +27,8 @@

<h2 id="Overview">Overview</h2>

<p>Apache Ant has two related features to allow the build process to be monitored:
listeners and loggers.</p>
<p>Apache Ant has two related features to allow the build process to be monitored: listeners and
loggers.</p>

<h3 id="Listeners">Listeners</h3>

@@ -44,19 +44,16 @@ listeners and loggers.</p>
<li>message logged</li>
</ul>

<p>
These are used internally for various recording and housekeeping operations,
however new listeners may registered on the command line through the <code>-listener</code>
argument.
</p>
<p>These are used internally for various recording and housekeeping operations, however new
listeners may registered on the command line through the <code>-listener</code> argument.</p>

<h3 id="Loggers">Loggers</h3>

<p>Loggers extend the capabilities of listeners and add the following features:</p>

<ul>
<li>Receives a handle to the standard output and error print streams and
therefore can log information to the console or the <code>-logfile</code> specified file.</li>
<li>Receives a handle to the standard output and error print streams and therefore can log
information to the console or the <code>-logfile</code> specified file.</li>
<li>Logging level (<code>-quiet</code>, <code>-verbose</code>, <code>-debug</code>) aware</li>
<li>Emacs-mode aware</li>
</ul>
@@ -71,8 +68,8 @@ listeners and loggers.</p>
</tr>
<tr>
<td><code><a href="#DefaultLogger">org.apache.tools.ant.DefaultLogger</a></code></td>
<td>The logger used implicitly unless overridden with the
<code>-logger</code> command-line switch.</td>
<td>The logger used implicitly unless overridden with the <code>-logger</code> command-line
switch.</td>
<td>BuildLogger</td>
</tr>
<tr>
@@ -82,8 +79,8 @@ listeners and loggers.</p>
</tr>
<tr>
<td><code><a href="#MailLogger">org.apache.tools.ant.listener.MailLogger</a></code></td>
<td>Extends DefaultLogger such that output is still generated
the same, and when the build is finished an e-mail can be sent.</td>
<td>Extends DefaultLogger such that output is still generated the same, and when the build is
finished an e-mail can be sent.</td>
<td>BuildLogger</td>
</tr>
<tr>
@@ -93,9 +90,9 @@ listeners and loggers.</p>
</tr>
<tr>
<td><code><a href="#Log4jListener">org.apache.tools.ant.listener.Log4jListener</a></code></td>
<td>Passes events to Apache Log4j for highly customizable logging.<br/>
<em><u>Deprecated</u></em>: Apache Log4j (1.x) is not developed any more. Last
release is 1.2.17 from 26 May 2012 and contains vulnerability issues.</td>
<td>Passes events to Apache Log4j for highly customizable
logging.<br/><em><u>Deprecated</u></em>: Apache Log4j (1.x) is not developed any more. Last
release is 1.2.17 from 26 May 2012 and contains vulnerability issues.</td>
<td>BuildListener</td>
</tr>
<tr>
@@ -115,13 +112,14 @@ listeners and loggers.</p>
</tr>
<tr>
<td><code><a href="#SimpleBigProjectLogger">org.apache.tools.ant.listener.SimpleBigProjectLogger</a></code></td>
<td>Prints the project name for subprojects only, otherwise like NoBannerLogger <em>Since Ant 1.8.1</em></td>
<td>Prints the project name for subprojects only, otherwise like NoBannerLogger <em>Since Ant
1.8.1</em></td>
<td>BuildLogger</td>
</tr>
<tr>
<td><code><a href="#ProfileLogger">org.apache.tools.ant.listener.ProfileLogger</a></code></td>
<td>The default logger, with start times, end times and
durations added for each task and target.</td>
<td>The default logger, with start times, end times and durations added for each task and
target.</td>
<td>BuildLogger</td>
</tr>
</table>
@@ -137,9 +135,9 @@ listeners and loggers.</p>
<pre>ant -logger org.apache.tools.ant.NoBannerLogger</pre>

<h3 id="MailLogger">MailLogger</h3>
<p>The MailLogger captures all output logged through DefaultLogger (standard Ant
output) and will send success and failure messages to unique e-mail lists, with
control for turning off success or failure messages individually.</p>
<p>The MailLogger captures all output logged through DefaultLogger (standard Ant output) and will
send success and failure messages to unique e-mail lists, with control for turning off success or
failure messages individually.</p>

<p>Properties controlling the operation of MailLogger:</p>
<table>
@@ -161,19 +159,18 @@ control for turning off success or failure messages individually.</p>
<tr>
<td><code>MailLogger.user</code></td>
<td>user name for SMTP auth</td>
<td>Yes, if SMTP auth is required on your SMTP server<br/>
the email message will be then sent using MIME and requires JavaMail</td>
<td>Yes, if SMTP auth is required on your SMTP server<br/> the email message will be then sent
using MIME and requires JavaMail</td>
</tr>
<tr>
<td><code>MailLogger.password</code></td>
<td>password for SMTP auth</td>
<td>Yes, if SMTP auth is required on your SMTP server<br/>
the email message will be then sent using MIME and requires JavaMail</td>
<td>Yes, if SMTP auth is required on your SMTP server<br/> the email message will be then sent
using MIME and requires JavaMail</td>
</tr>
<tr>
<td><code>MailLogger.ssl</code></td>
<td>on or true if SSL is needed<br/>
This feature requires JavaMail</td>
<td>on or true if SSL is needed<br/>This feature requires JavaMail</td>
<td>No</td>
</tr>
<tr>
@@ -258,7 +255,8 @@ control for turning off success or failure messages individually.</p>
</tr>
<tr>
<td><code>MailLogger.starttls.enable</code></td>
<td>on or true if <code>STARTTLS</code> should be supported (requires JavaMail). <em>Since Ant 1.8.0</em></td>
<td>on or true if <code>STARTTLS</code> should be supported (requires JavaMail). <em>Since Ant
1.8.0</em></td>
<td>No; default is <q>false</q></td>
</tr>
<tr>
@@ -272,42 +270,35 @@ control for turning off success or failure messages individually.</p>

<h3 id="AnsiColorLogger">AnsiColorLogger</h3>

<p>The AnsiColorLogger adds color to the standard Ant output
by prefixing and suffixing ANSI color code escape sequences to
it. It is just an extension of <a href="#DefaultLogger">DefaultLogger</a>
<p>The AnsiColorLogger adds color to the standard Ant output by prefixing and suffixing ANSI color
code escape sequences to it. It is just an extension of <a href="#DefaultLogger">DefaultLogger</a>
and hence provides all features that DefaultLogger does.</p>
<p>AnsiColorLogger differentiates the output by assigning
different colors depending upon the type of the message.</p>
<p>If used with the <code>-logfile</code> option, the output file
will contain all the necessary escape codes to
display the text in colorized mode when displayed
in the console using applications like <code>cat</code>, <code>more</code>, etc.</p>
<p>This is designed to work on terminals that support ANSI
color codes. It works on XTerm, ETerm, Win9x Console
(with ANSI.SYS loaded.), etc.</p>
<p><strong>Note</strong>: It doesn't work on WinNT and successors,
even when a <code>COMMAND.COM</code> console loaded with ANSI.SYS is used.</p>
<p>If the user wishes to override the default colors
with custom ones, a file containing zero or more of the
custom color key-value pairs must be created. The recognized keys
and their default values are shown below:</p>
<p>AnsiColorLogger differentiates the output by assigning different colors depending upon the type
of the message.</p>
<p>If used with the <code>-logfile</code> option, the output file will contain all the necessary
escape codes to display the text in colorized mode when displayed in the console using applications
like <code>cat</code>, <code>more</code>, etc.</p>
<p>This is designed to work on terminals that support ANSI color codes. It works on XTerm, ETerm, Win9x Console (with
ANSI.SYS loaded.), etc.</p>
<p><strong>Note</strong>: It doesn't work on WinNT and successors, even when
a <code>COMMAND.COM</code> console loaded with ANSI.SYS is used.</p>
<p>If the user wishes to override the default colors with custom ones, a file containing zero or
more of the custom color key-value pairs must be created. The recognized keys and their default
values are shown below:</p>
<pre>
AnsiColorLogger.ERROR_COLOR=2;31
AnsiColorLogger.WARNING_COLOR=2;35
AnsiColorLogger.INFO_COLOR=2;36
AnsiColorLogger.VERBOSE_COLOR=2;32
AnsiColorLogger.DEBUG_COLOR=2;34</pre>
<p>Each key takes as value a color combination defined as
<q>Attribute;Foreground;Background</q>. In the above example, background
value has not been used.</p>
<p>Each key takes as value a color combination defined as <q>Attribute;Foreground;Background</q>.
In the above example, background value has not been used.</p>
<p>This file must be specified as the value of a system variable
named <code>ant.logger.defaults</code> and passed as an argument using
the <code>-D</code> option to the <code>java</code> command that
invokes the Ant application. An easy way to achieve this is to
add <code>-Dant.logger.defaults=</code><samp>/path/to/your/file</samp>
to the <code>ANT_OPTS</code> environment variable. Ant's launching
script recognizes this flag and will pass it to the <code>java</code>
command appropriately.</p>
named <code>ant.logger.defaults</code> and passed as an argument using the <code>-D</code> option to
the <code>java</code> command that invokes the Ant application. An easy way to achieve this is to
add <code>-Dant.logger.defaults=</code><samp>/path/to/your/file</samp> to the <code>ANT_OPTS</code>
environment variable. Ant's launching script recognizes this flag and will pass it to
the <code>java</code> command appropriately.</p>
<p>Format:</p>
<pre>
AnsiColorLogger.*=Attribute;Foreground;Background
@@ -344,34 +335,32 @@ Background is one of the following:
<pre>ant -logger org.apache.tools.ant.listener.AnsiColorLogger</pre>

<h3 id="Log4jListener">Log4jListener</h3>
<p><em><u>Deprecated</u></em>: Apache Log4j (1) is not developed any more. Last
release is 1.2.17 from 26 May 2012 and contains vulnerability issues.</p>
<p>Passes build events to Log4j, using the full classname's of the generator of
each build event as the category:</p>
<p><em><u>Deprecated</u></em>: Apache Log4j (1) is not developed any more. Last release is 1.2.17
from 26 May 2012 and contains vulnerability issues.</p>
<p>Passes build events to Log4j, using the full classname's of the generator of each build event as
the category:</p>
<ul>
<li>build started / build finished&mdash;<code>org.apache.tools.ant.Project</code></li>
<li>target started / target finished&mdash;<code>org.apache.tools.ant.Target</code></li>
<li>task started / task finished&mdash;the fully qualified classname of the task</li>
<li>message logged&mdash;the classname of one of the above, so if a task logs a
message, its classname is the category used, and so on.</li>
<li>message logged&mdash;the classname of one of the above, so if a task logs a message, its
classname is the category used, and so on.</li>
</ul>
<p>All start events are logged as INFO. Finish events are either logged as
INFO or ERROR depending on whether the build failed during that stage. Message
events are logged according to their Ant logging level, mapping directly to a
corresponding Log4j level.</p>
<p>All start events are logged as INFO. Finish events are either logged as INFO or ERROR depending
on whether the build failed during that stage. Message events are logged according to their Ant
logging level, mapping directly to a corresponding Log4j level.</p>

<pre>ant -listener org.apache.tools.ant.listener.Log4jListener</pre>

<p>To use Log4j you will need the Log4j JAR file and a <samp>log4j.properties</samp>
configuration file. Both should be placed somewhere in your Ant
classpath. If the <samp>log4j.properties</samp> is in your project root folder you can
add this with <code>-lib</code> option:</p>
<p>To use Log4j you will need the Log4j JAR file and a <samp>log4j.properties</samp> configuration
file. Both should be placed somewhere in your Ant classpath. If the <samp>log4j.properties</samp>
is in your project root folder you can add this with <code>-lib</code> option:</p>

<pre>ant -listener org.apache.tools.ant.listener.Log4jListener -lib .</pre>

<p>If, for example, you wanted to capture the same information output to the
console by the DefaultLogger and send it to a file named <samp>build.log</samp>, you
could use the following configuration:</p>
<p>If, for example, you wanted to capture the same information output to the console by the
DefaultLogger and send it to a file named <samp>build.log</samp>, you could use the following
configuration:</p>

<pre>
log4j.rootLogger=ERROR, LogFile
@@ -385,22 +374,22 @@ log4j.appender.LogFile.layout=org.apache.log4j.PatternLayout
log4j.appender.LogFile.layout.ConversionPattern=[%6r] %8c{1} : %m%n
log4j.appender.LogFile.file=build.log</pre>

<p>For more information about configuring Log4J see <a href="https://logging.apache.org/log4j/1.2/">its
documentation page</a>.</p>
<p>For more information about configuring Log4J see <a href="https://logging.apache.org/log4j/1.2/"
target="_top">its documentation page</a>.</p>

<h4>Using the Log4j 1.2 Bridge</h4>
You could use the <a href="https://logging.apache.org/log4j/2.x/log4j-1.2-api/index.html">Log4j Bridge</a>
if your application is written against the Log4j (1.x) API, but you want to use the Log4j 2.x runtime.
For using the bridge with Ant you have to add
<p>You could use the <a href="https://logging.apache.org/log4j/2.x/log4j-1.2-api/index.html"
target="_top">Log4j Bridge</a> if your application is written against the Log4j (1.x) API, but you
want to use the Log4j 2.x runtime. For using the bridge with Ant you have to add</p>
<ul>
<li><samp>log4j-1.2-api-${log4j.version}.jar</samp></li>
<li><samp>log4j-api-${log4j.version}.jar</samp></li>
<li><samp>log4j-core-${log4j.version}.jar</samp></li>
<li><samp>log4j2.xml</samp></li>
</ul>
to your classpath, e.g. via the <code>-lib</code> option.
(For using the bridge, Ant 1.9.10/1.10.2 or higher is required.)
Translating the 1.x properties file into the 2.x xml syntax would result in
<p>to your classpath, e.g. via the <code>-lib</code> option. (For using the bridge, Ant
1.9.10/1.10.2 or higher is required.) Translating the 1.x properties file into the 2.x XML syntax
would result in</p>
<pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;Configuration status=&quot;WARN&quot;&gt;
@@ -423,40 +412,31 @@ Translating the 1.x properties file into the 2.x xml syntax would result in
&lt;/Configuration&gt;</pre>

<h3 id="XmlLogger">XmlLogger</h3>
<p>Writes all build information out to an XML file
named <samp>log.xml</samp>, or the value of
the <code>XmlLogger.file</code> property if present, when used as a
listener. When used as a logger, it writes all output to either the
console or to the value of <code>-logfile</code>. Whether used as a
listener or logger, the output is not generated until the build is
complete, as it buffers the information in order to provide timing
information for task, targets, and the project.</p>
<p>By default the XML file creates a reference to an XSLT
file <samp>log.xsl</samp> in the current directory; look
in <samp>ANT_HOME/etc</samp> for one of these. You can set the
property <code>ant.XmlLogger.stylesheet.uri</code> to provide a URI
to a style sheet. This can be a relative or absolute file path, or
an HTTP URL. If you set the property to the empty string, <q></q>,
no XSLT transform is declared at all.</p>
<p>Writes all build information out to an XML file named <samp>log.xml</samp>, or the value of
the <code>XmlLogger.file</code> property if present, when used as a listener. When used as a logger,
it writes all output to either the console or to the value of <code>-logfile</code>. Whether used as
a listener or logger, the output is not generated until the build is complete, as it buffers the
information in order to provide timing information for task, targets, and the project.</p>
<p>By default the XML file creates a reference to an XSLT file <samp>log.xsl</samp> in the current
directory; look in <samp>ANT_HOME/etc</samp> for one of these. You can set the
property <code>ant.XmlLogger.stylesheet.uri</code> to provide a URI to a style sheet. This can be a
relative or absolute file path, or an HTTP URL. If you set the property to the empty
string, <q></q>, no XSLT transform is declared at all.</p>

<pre>ant -listener org.apache.tools.ant.XmlLogger
ant -logger org.apache.tools.ant.XmlLogger -verbose -logfile build_log.xml</pre>

<h3 id="TimestampedLogger">TimestampedLogger</h3>
<p>
Acts like the default logger, except that the final success/failure message also includes
the time that the build completed. For example:
</p>
<p>Acts like the default logger, except that the final success/failure message also includes the
time that the build completed. For example:</p>
<pre>BUILD SUCCESSFUL - at 16/08/05 16:24</pre>
<p>To use this listener, use the command:</p>

<pre>ant -logger org.apache.tools.ant.listener.TimestampedLogger</pre>

<h3 id="BigProjectLogger">BigProjectLogger</h3>
<p>
This logger is designed to make examining the logs of a big build easier,
especially those run under continuous integration tools. It
</p>
<p>This logger is designed to make examining the logs of a big build easier, especially those run
under continuous integration tools. It</p>
<ol>
<li>When entering a child project, prints its name and directory</li>
<li>When exiting a child project, prints its name</li>
@@ -464,12 +444,9 @@ especially those run under continuous integration tools. It
<li>Omits logging the names of all targets that have no direct task output</li>
<li>Includes the build finished timestamp of the TimeStamp logger</li>
</ol>
<p>
This is useful when using <code>&lt;subant&gt;</code> to build a large project
from many smaller projects&mdash;the output shows which particular
project is building. Here is an example in which "clean" is being called
on all a number of child projects, only some of which perform work:
</p>
<p>This is useful when using <code>&lt;subant&gt;</code> to build a large project from many smaller
projects&mdash;the output shows which particular project is building. Here is an example in which
"clean" is being called on all a number of child projects, only some of which perform work:</p>
<pre>
======================================================================
Entering project "xunit"
@@ -493,20 +470,16 @@ In /home/ant/components/junit
Exiting project "junit"
======================================================================</pre>

<p>
The entry and exit messages are very verbose in this example, but in
a big project compiling or testing many child components, the messages
are reduced to becoming clear delimiters of where different projects
are in charge&mdash;or, more importantly, which project is failing.
</p>
<p>The entry and exit messages are very verbose in this example, but in a big project compiling or
testing many child components, the messages are reduced to becoming clear delimiters of where
different projects are in charge&mdash;or, more importantly, which project is failing.</p>
<p>To use this listener, use the command:</p>
<pre>ant -logger org.apache.tools.ant.listener.BigProjectLogger</pre>

<h3 id="SimpleBigProjectLogger">SimpleBigProjectLogger</h3>
<p><em>Since Ant 1.8.1</em></p>
<p>Like <code>BigProjectLogger</code>, project-qualified target names
are printed, useful for big builds with subprojects. Otherwise it is
as quiet as <code>NoBannerLogger</code>:</p>
<p>Like <code>BigProjectLogger</code>, project-qualified target names are printed, useful for big
builds with subprojects. Otherwise it is as quiet as <code>NoBannerLogger</code>:</p>
<pre>
Buildfile: /sources/myapp/build.xml

@@ -532,10 +505,9 @@ Total time: 1 second</pre>
<h3 id="ProfileLogger">ProfileLogger</h3>
<!-- This is the 'since' as described in the Loggers JavaDoc -->
<p><em>Since Ant 1.8.0</em></p>
<p>This logger stores the time needed for executing a task, target and
the whole build and prints these information. The output contains a
timestamp when entering the build, target or task and a timestamp
and the needed time when exiting.</p>
<p>This logger stores the time needed for executing a task, target and the whole build and prints
these information. The output contains a timestamp when entering the build, target or task and a
timestamp and the needed time when exiting.</p>
<h4>Example</h4>
Having that buildfile
<pre>
@@ -550,7 +522,8 @@ Having that buildfile
&lt;echo&gt;another-echo-task&lt;/echo&gt;
&lt;/target&gt;
&lt;/project&gt;</pre>
and executing with <code>ant -logger org.apache.tools.ant.listener.ProfileLogger anotherTarget</code> gives that output (with other timestamps and duration of course ;-):
<p>and executing with <code>ant -logger org.apache.tools.ant.listener.ProfileLogger
anotherTarget</code> gives that output (with other timestamps and duration of course ;-):</p>
<pre>
Buildfile: ...\build.xml

@@ -588,22 +561,24 @@ Total time: 2 seconds</pre>

<ul>
<li>
A listener or logger should not write to standard output or error in the <code>messageLogged()</code> method;
Ant captures these internally and it will trigger an infinite loop.
A listener or logger should not write to standard output or error in
the <code>messageLogged()</code> method; Ant captures these internally and it will trigger an
infinite loop.
</li>
<li>
Logging is synchronous; all listeners and loggers are called one after the other, with the build blocking until
the output is processed. Slow logging means a slow build.
Logging is synchronous; all listeners and loggers are called one after the other, with the build
blocking until the output is processed. Slow logging means a slow build.
</li>
<li>When a build is started, and <code>BuildListener.buildStarted(BuildEvent event)</code> is called,
the project is not fully functional. The build has started, yes, and the <code>event.getProject()</code> method call
returns the Project instance, but that project is initialized with JVM and Ant properties, nor has it
parsed the build file yet. You cannot call <code>Project.getProperty()</code> for property lookup, or
<li>When a build is started, and <code>BuildListener.buildStarted(BuildEvent event)</code> is
called, the project is not fully functional. The build has started, yes, and
the <code>event.getProject()</code> method call returns the Project instance, but that project
is initialized with JVM and Ant properties, nor has it parsed the build file yet. You cannot
call <code>Project.getProperty()</code> for property lookup, or
<code>Project.getName()</code> to get the project name (it will return null).
</li>
<li>
Classes that implement <code>org.apache.tools.ant.SubBuildListener</code> receive notifications when child projects
start and stop.
Classes that implement <code>org.apache.tools.ant.SubBuildListener</code> receive notifications
when child projects start and stop.
</li>
</ul>



+ 69
- 92
manual/platform.html View File

@@ -27,100 +27,83 @@
<h2>Java versions</h2>
<h3>Java 5</h3>
<p>
You may need a bigger stack than default, especially if you are using
the built in XSLT engine. We recommend you use Apache Xalan; indeed,
some tasks (JUnit report in XML, for example) may not work against the
shipping XSL engine.
You may need a bigger stack than default, especially if you are using the built in XSLT engine. We
recommend you use Apache Xalan; indeed, some tasks (JUnit report in XML, for example) may not work
against the shipping XSL engine.
</p>

<h2>Unix and Linux</h2>
<ul>
<li>You should use a GNU version of <code>tar</code> to untar the Apache
Ant source tree, if you have downloaded this as a tar file. If you get
weird errors about missing files, this is the problem.</li>
<li>Ant does not preserve file permissions when a file is copied,
moved or archived, because Java does not let it read or write the
permissions. Use <code>&lt;chmod&gt;</code> to set permissions, and
when creating a tar archive, use the <var>mode</var> attribute
of <code>&lt;tarfileset&gt;</code> to set the permissions in the tar
file, or <code>&lt;apply&gt;</code> the real tar program.</li>
<li>Ant is not symbolic link aware in moves, deletes and when
recursing down a tree of directories to build up a list of
files. Unexpected things can happen.</li>
<li>Linux on IA-64: apparently you need a larger heap than the default
one (64M) to compile big projects. If you get out of heap errors,
either increase the heap or use a forking javac. Better yet, use jikes
for extra compilation speed.</li>
<li>You should use a GNU version of <code>tar</code> to untar the Apache Ant source tree, if you
have downloaded this as a tar file. If you get weird errors about missing files, this is the
problem.</li>
<li>Ant does not preserve file permissions when a file is copied, moved or archived, because Java
does not let it read or write the permissions. Use <code>&lt;chmod&gt;</code> to set permissions,
and when creating a tar archive, use the <var>mode</var> attribute
of <code>&lt;tarfileset&gt;</code> to set the permissions in the tar file,
or <code>&lt;apply&gt;</code> the real tar program.</li>
<li>Ant is not symbolic link aware in moves, deletes and when recursing down a tree of directories
to build up a list of files. Unexpected things can happen.</li>
<li>Linux on IA-64: apparently you need a larger heap than the default one (64M) to compile big
projects. If you get out of heap errors, either increase the heap or use a
forking <code>javac</code>. Better yet, use jikes for extra compilation speed.</li>
</ul>

<h2>Microsoft Windows</h2>
<p>
Windows 9x (win95, win98, win98SE and winME) are not supported in Ant1.7,
Windows 9x (win95, win98, win98SE and winME) are not supported <em>since Ant 1.7</em>.
</p>
<p>
The Ant team has retired support for these products because they are
outdated and can expose customers to security risks. We recommend that
customers who are still running Windows 98 or Windows Me upgrade to a
newer, more secure operating system, as soon as possible.
The Ant team has retired support for these products because they are outdated and can expose
customers to security risks. We recommend that customers who are still running Windows 98 or Windows
ME upgrade to a newer, more secure operating system, as soon as possible.
</p>
<p>
Customers who upgrade to Linux report improved security, richer
functionality, and increased productivity.
Customers who upgrade to Linux report improved security, richer functionality, and increased
productivity.
</p>

<h2>Microsoft Windows 2K, XP and Server 2K03</h2>
<p>
Windows 9x (win95, win98, win98SE and winME) has a batch file system
which does not work fully with long file names, so we recommend that
ant and the JDK are installed into directories without spaces, and
with 8.3 filenames. The Perl and Python launcher scripts do not
suffer from this limitation.
Windows 9x (win95, win98, win98SE and winME) has a batch file system which does not work fully with
long file names, so we recommend that Ant and JDK are installed into directories without spaces, and
with 8.3 filenames. The Perl and Python launcher scripts do not suffer from this limitation.
</p>
<p>
All versions of Windows are usually case insensitive, although mounted
file systems (Unix drives, ClearCase views) can be case sensitive
underneath, confusing patternsets.
All versions of Windows are usually case insensitive, although mounted file systems (Unix drives,
ClearCase views) can be case sensitive underneath, confusing patternsets.
</p>
<p>
Ant can often not delete a directory which is open in an Explorer
window. There is nothing we can do about this short of spawning a
program to kill the shell before deleting directories. Nor can files
that are in use be overwritten.
Ant can often not delete a directory which is open in an Explorer window. There is nothing we can
do about this short of spawning a program to kill the shell before deleting directories. Nor can
files that are in use be overwritten.
</p>
<p>
Finally, if any Ant task fails with an <code>error=2</code>, it
means that whatever native program Ant is trying to run, it is not
on the path.
Finally, if any Ant task fails with an <code>error=2</code>, it means that whatever native program
Ant is trying to run, it is not on the path.
</p>

<h2>Microsoft Windows Vista</h2>
<p>
There are reports of problems with Windows Vista security bringing
up dialog boxes asking if the user wants to run an untrusted
executable during an Ant run, such as when the &lt;signjar&gt; task
runs the <code>jarsigner.exe</code> program. This is beyond Ant's
control, and stems from the OS trying to provide some illusion of
security by being reluctant to run unsigned native executables. The
latest Java versions appear to resolve this problem by having signed
binaries.
There are reports of problems with Windows Vista security bringing up dialog boxes asking if the
user wants to run an untrusted executable during an Ant run, such as when the &lt;signjar&gt; task
runs the <code>jarsigner.exe</code> program. This is beyond Ant's control, and stems from the OS
trying to provide some illusion of security by being reluctant to run unsigned native executables.
The latest Java versions appear to resolve this problem by having signed binaries.
</p>

<h2>Cygwin</h2>
<p>
Cygwin is not an operating system; rather it is an application suite
running under Windows and providing some UNIX like functionality. Sun
has not created any specific Java Development Kit or Java Runtime
Environment for cygwin. See this
link: <a href="http://www.inonit.com/cygwin/faq/">http://www.inonit.com/cygwin/faq/</a>.
Only Windows path names are supported by JDK and JRE tools under
Windows or cygwin. Relative path names such as "src/org/apache/tools"
are supported, but Java tools do not
understand <samp>/cygdrive/c</samp> to mean <samp>c:\</samp>.
Cygwin is not an operating system; rather it is an application suite running under Windows and
providing some UNIX like functionality. Sun has not created any specific Java Development Kit or
Java Runtime Environment for cygwin. See this link: <a href="http://www.inonit.com/cygwin/faq/"
target="_top">http://www.inonit.com/cygwin/faq/</a>. Only Windows path names are supported by JDK
and JRE tools under Windows or cygwin. Relative path names such as <samp>src/org/apache/tools</samp>
are supported, but Java tools do not understand <samp>/cygdrive/c</samp> to mean <samp>c:\</samp>.
</p>
<p>
The utility <code>cygpath</code> (used industrially in
the <code>ant</code> script to support cygwin) can convert cygwin path
names to Windows. You can use the <code>&lt;exec&gt;</code> task in
The utility <code>cygpath</code> (used industrially in the <code>ant</code> script to support
cygwin) can convert cygwin path names to Windows. You can use the <code>&lt;exec&gt;</code> task in
Ant to convert cygwin paths to Windows path, for instance like that:
</p>
<pre>
@@ -132,42 +115,38 @@ Ant to convert cygwin paths to Windows path, for instance like that:
&lt;echo message=&quot;${windows.pathname}&quot;/&gt;
</pre>
<p>
We get lots of support calls from Cygwin users. Either it is
incredibly popular, or it is trouble. If you do use it, remember that
Java is a Windows application, so Ant is running in a Windows process,
not a Cygwin one. This will save us having to mark your bug reports as
invalid.
We get lots of support calls from Cygwin users. Either it is incredibly popular, or it is
trouble. If you do use it, remember that Java is a Windows application, so Ant is running in a
Windows process, not a Cygwin one. This will save us having to mark your bug reports as invalid.
</p>

<h2>Apple MacOS X/macOS</h2>
<p>
MacOS X a.k.a. macOS is the first of the Apple platforms that Ant
supports completely; it is treated like any other Unix.
MacOS X a.k.a. macOS is the first of the Apple platforms that Ant supports completely; it is treated
like any other Unix.
</p>

<h2>Novell Netware</h2>
<p>
To give the same level of sophisticated control as Ant's startup
scripts on other platforms, it was decided to make the main ant
startup on NetWare be via a Perl Script, <code>runant.pl</code>. This
is found in the <samp>bin</samp> directory (for
instance&mdash;<samp>bootstrap\bin</samp>
To give the same level of sophisticated control as Ant's startup scripts on other platforms, it was
decided to make the main ant startup on NetWare be via a Perl Script, <code>runant.pl</code>. This
is found in the <samp>bin</samp> directory (for instance&mdash;<samp>bootstrap\bin</samp>
or <samp>dist\bin</samp>).
</p>

<p>One important item of note is that you need to set up the following to run Ant:</p>
<ul>
<li><code>CLASSPATH</code>&mdash;put <samp>ant.jar</samp> and any other needed jars on the system classpath.</li>
<li><code>ANT_OPTS</code>&mdash;On NetWare, <code>ANT_OPTS</code>
needs to include a parameter of the
form, <code>-envCWD=<i>ANT_HOME</i></code>,
with <code><i>ANT_HOME</i></code> being the fully expanded location
of Ant, <strong>not</strong> an environment variable. This is due
to the fact that the NetWare System Console has no notion of a
current working directory.</li>
<li><code>CLASSPATH</code>&mdash;put <samp>ant.jar</samp> and any other needed jars on the system
classpath.</li>
<li><code>ANT_OPTS</code>&mdash;On NetWare, <code>ANT_OPTS</code> needs to include a parameter of
the form, <code>-envCWD=<i>ANT_HOME</i></code>, with <code><i>ANT_HOME</i></code> being the
fully expanded location of Ant, <strong>not</strong> an environment variable. This is due to
the fact that the NetWare System Console has no notion of a current working directory.</li>
</ul>
<p>It is suggested that you create up an ant.ncf that sets up these parameters, and calls <samp>perl ANT_HOME/dist/bin/runant.pl</samp></p>
<p>The following is an example of such an NCF file (assuming Ant is installed in <samp>sys:/apache-ant/</samp>):</p>
<p>It is suggested that you create up an <samp>ant.ncf</samp> that sets up these parameters, and
calls <samp>perl ANT_HOME/dist/bin/runant.pl</samp></p>
<p>The following is an example of such an NCF file (assuming Ant is installed
in <samp>sys:/apache-ant/</samp>):</p>
<pre>
envset CLASSPATH=sys:/apache-ant/bootstrap/lib/ant.jar
envset CLASSPATH=$CLASSPATH;sys:/apache-ant/lib/optional/junit.jar
@@ -180,18 +159,16 @@ envset ANT_HOME=sys:/apache-ant/dist/lib

perl sys:/apache-ant/dist/bin/runant.pl</pre>

<p>Ant works on JVM version 1.3 or higher. You may have some luck
running it on JVM 1.2, but serious problems have been found running
Ant on JVM 1.1.7B. These problems are caused by JVM bugs that will
not be fixed.</p>
<p>Ant works on JVM version 1.3 or higher. You may have some luck running it on JVM 1.2, but
serious problems have been found running Ant on JVM 1.1.7B. These problems are caused by JVM bugs
that will not be fixed.</p>
<p>JVM 1.3 is supported on Novell NetWare versions 5.1 and higher.</p>

<h2>Other platforms</h2>
<p>
Support for other platforms is not guaranteed to be complete, as
certain techniques to hide platform details from build files need to
be written and tested on every particular platform. Contributions in
this area are welcome.
Support for other platforms is not guaranteed to be complete, as certain techniques to hide platform
details from build files need to be written and tested on every particular platform. Contributions
in this area are welcome.
</p>

</body>


+ 150
- 203
manual/properties.html View File

@@ -25,67 +25,61 @@
<body>
<h1>Properties</h1>

<p>Properties are key-value pairs where Apache Ant tries to
expand <code>${key}</code> to <code>value</code> at runtime.</p>

<p>There are many tasks that can set properties, the most common one
is the <a href="Tasks/property.html">property</a> task. In
addition properties can be defined
via <a href="running.html">command line arguments</a> or similar
mechanisms from outside of Ant.</p>

<p>Normally property values can not be changed, once a property is
set, most tasks will not allow its value to be modified. In
general properties are of global scope, i.e. once they have been
defined they are available for any task or target invoked
subsequently&mdash;it is not possible to set a property in a child
build process created via
<p>Properties are key-value pairs where Apache Ant tries to expand <code>${key}</code>
to <code>value</code> at runtime.</p>

<p>There are many tasks that can set properties, the most common one is
the <a href="Tasks/property.html">property</a> task. In addition properties can be defined
via <a href="running.html">command line arguments</a> or similar mechanisms from outside of
Ant.</p>

<p>Normally property values can not be changed, once a property is set, most tasks will not allow
its value to be modified. In general properties are of global scope, i.e. once they have been
defined they are available for any task or target invoked subsequently&mdash;it is not possible
to set a property in a child build process created via
the <a href="Tasks/ant.html">ant</a>, <a href="Tasks/antcall.html">antcall</a>
or <a href="Tasks/subant.html">subant</a> tasks and make it
available to the calling build process, though.</p>
or <a href="Tasks/subant.html">subant</a> tasks and make it available to the calling build
process, though.</p>

<p><em>Since Ant 1.8.0</em> the <a href="Tasks/local.html">local</a>
task can be used to create properties that are locally scoped to a
target or a <a href="Tasks/sequential.html">sequential</a> element
like the one of the <a href="Tasks/macrodef.html">macrodef</a>
task.</p>
<p><em>Since Ant 1.8.0</em> the <a href="Tasks/local.html">local</a> task can be used to create
properties that are locally scoped to a target or
a <a href="Tasks/sequential.html">sequential</a> element like the one of
the <a href="Tasks/macrodef.html">macrodef</a> task.</p>

<h2 id="built-in-props">Built-in Properties</h2>

<p>Ant provides access to all system properties as if they had been
defined using a <code>&lt;property&gt;</code> task. For
example, <samp>${os.name}</samp> expands to the name of the
operating system.</p>
<p>Ant provides access to all system properties as if they had been defined using
a <code>&lt;property&gt;</code> task. For example, <samp>${os.name}</samp> expands to the name
of the operating system.</p>

<p>For a list of system properties,
see <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#getProperties--">the javadoc of System.getProperties</a>.
see <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#getProperties--"
target="_top">the javadoc of System.getProperties</a>.
</p>

<p>In addition, Ant has some built-in properties:</p>
<dl>
<dt><code>basedir</code></dt>
<dd>the absolute path of the project's basedir (as set
with the <var>basedir</var> attribute of <a href="using.html#projects">&lt;project&gt;</a>).</dd>
<dd>the absolute path of the project's basedir (as set with
the <var>basedir</var> attribute
of <a href="using.html#projects">&lt;project&gt;</a>).</dd>
<dt><code>ant.file</code></dt>
<dd>the absolute path of the buildfile.</dd>
<dt><code>ant.version</code></dt>
<dd>the version of Ant</dd>
<dt><code>ant.project.name</code></dt>
<dd>the name of the project that is currently executing; it is set
in the <var>name</var> attribute of &lt;project&gt;.</dd>
<dd>the name of the project that is currently executing; it is set in the <var>name</var>
attribute of &lt;project&gt;.</dd>
<dt><code>ant.project.default-target</code></dt>
<dd>the name of the currently executing project's default target;
it is set via the <var>default</var> attribute
of <code>&lt;project&gt;</code>.</dd>
<dd>the name of the currently executing project's default target; it is set via
the <var>default</var> attribute of <code>&lt;project&gt;</code>.</dd>
<dt><code>ant.project.invoked-targets</code></dt>
<dd>a comma separated list of the targets that have been specified
on the command line (the IDE, an <code>&lt;ant&gt;</code> task
...) when invoking the current project.<br/>
This property is set properly when the first target is executed.
If you use it in the implicit target (directly under
the <code>&lt;project&gt;</code> tag) the list will be empty if
no target has been specified while it will contain the project's
default target in this case for tasks nested into targets.</dd>
<dd>a comma separated list of the targets that have been specified on the command line (the IDE,
an <code>&lt;ant&gt;</code> task ...) when invoking the current project.<br/> This property
is set properly when the first target is executed. If you use it in the implicit target
(directly under the <code>&lt;project&gt;</code> tag) the list will be empty if no target has
been specified while it will contain the project's default target in this case for tasks
nested into targets.</dd>
<dt><code>ant.java.version</code></dt>
<dd>the JVM version Ant detected; currently it can hold the
values <q>9</q>, <q>1.8</q>, <q>1.7</q>, <q>1.6</q>, <q>1.5</q>, <q>1.4</q>, <q>1.3</q>
@@ -94,83 +88,69 @@
<dd>the absolute path of the <samp>ant.jar</samp> file.</dd>
</dl>

<p>There is also another property, but this is set by the launcher
script and therefore maybe not set inside IDEs:</p>
<p>There is also another property, but this is set by the launcher script and therefore maybe not
set inside IDEs:</p>
<dl>
<dt><code>ant.home</code></dt>
<dd>home directory of Ant</dd>
</dl>

<p>The following property is only set if Ant is started via the
Launcher class (which means it may not be set inside IDEs
either):</p>
<p>The following property is only set if Ant is started via the Launcher class (which means it may
not be set inside IDEs either):</p>
<dl>
<dt><code>ant.library.dir</code></dt>
<dd>the directory that has been used to load Ant's
jars from. In most cases this is <samp>ANT_HOME/lib</samp>.</dd>
<dd>the directory that has been used to load Ant's jars from. In most cases this
is <samp>ANT_HOME/lib</samp>.</dd>
</dl>

<h1 id="propertyHelper">PropertyHelpers</h1>

<p>Ant's property handling is accomplished by an instance
of <code>org.apache.tools.ant.PropertyHelper</code> associated
with the current Project. You can learn more about this class by
examining Ant's Java API. In Ant 1.8 the PropertyHelper class was
much reworked and now itself employs a number of helper classes
(actually instances of
the <code>org.apache.tools.ant.PropertyHelper$Delegate</code>
marker interface) to take care of discrete tasks such as property
setting, retrieval, parsing, etc. This makes Ant's property
of <code>org.apache.tools.ant.PropertyHelper</code> associated with the current Project. You
can learn more about this class by examining Ant's Java API. In Ant 1.8 the PropertyHelper class
was much reworked and now itself employs a number of helper classes (actually instances of
the <code>org.apache.tools.ant.PropertyHelper$Delegate</code> marker interface) to take care of
discrete tasks such as property setting, retrieval, parsing, etc. This makes Ant's property
handling highly extensible; also of interest is the
new <a href="Tasks/propertyhelper.html">propertyhelper</a> task
used to manipulate the PropertyHelper and its delegates from the
context of the Ant buildfile.</p>
new <a href="Tasks/propertyhelper.html">propertyhelper</a> task used to manipulate the
PropertyHelper and its delegates from the context of the Ant buildfile.</p>

<p>There are three sub-interfaces of <code>Delegate</code> that may be
useful to implement.</p>
<p>There are three sub-interfaces of <code>Delegate</code> that may be useful to implement.</p>

<ul>
<li><code>org.apache.tools.ant.property.PropertyExpander</code> is
responsible for finding the property name inside a string in the
first place (the default extracts <samp>foo</samp>
<li><code>org.apache.tools.ant.property.PropertyExpander</code> is responsible for finding the
property name inside a string in the first place (the default extracts <samp>foo</samp>
from <samp>${foo}</samp>).

<p>This is the interface you'd implement if you wanted to invent
your own property syntax&mdash;or allow nested property expansions
since the default implementation doesn't balance braces
(see <a href="https://git-wip-us.apache.org/repos/asf?p=ant-antlibs-props.git;a=blob;f=src/main/org/apache/ant/props/NestedPropertyExpander.java;hb=HEAD"><code>NestedPropertyExpander</code>
in the <samp>props</samp> Antlib</a> for an example).</p>
<p>This is the interface you'd implement if you wanted to invent your own property
syntax&mdash;or allow nested property expansions since the default implementation doesn't
balance braces
(see <a href="https://git-wip-us.apache.org/repos/asf?p=ant-antlibs-props.git;a=blob;f=src/main/org/apache/ant/props/NestedPropertyExpander.java;hb=HEAD"
target="_top"><code>NestedPropertyExpander</code> in the <samp>props</samp> Antlib</a> for
an example).</p>
</li>

<li><code>org.apache.tools.ant.PropertyHelper$PropertyEvaluator</code>
is used to expand <samp>${some-string}</samp> into
an <code>Object</code>.

<p>This is the interface you'd implement if you want to provide
your own storage independent of Ant's project instance&mdash;the
interface represents the reading end. An example for this
would
be <code>org.apache.tools.ant.property.LocalProperties</code>
which implements storage
for <a href="Tasks/local.html">local properties</a>.</p>

<p>Another reason to implement this interface is if you wanted
to provide your own "property protocol" like
expanding <code>toString:foo</code> by looking up the project
reference <samp>foo</samp> and invoking <code>toString()</code> on it
(which is already implemented in Ant, see below).</p>
<li><code>org.apache.tools.ant.PropertyHelper$PropertyEvaluator</code> is used to
expand <samp>${some-string}</samp> into an <code>Object</code>.

<p>This is the interface you'd implement if you want to provide your own storage independent
of Ant's project instance&mdash;the interface represents the reading end. An example for
this would be <code>org.apache.tools.ant.property.LocalProperties</code> which implements
storage for <a href="Tasks/local.html">local properties</a>.</p>

<p>Another reason to implement this interface is if you wanted to provide your own "property
protocol" like expanding <code>toString:foo</code> by looking up the project
reference <samp>foo</samp> and invoking <code>toString()</code> on it (which is already
implemented in Ant, see below).</p>
</li>

<li><code>org.apache.tools.ant.PropertyHelper$PropertySetter</code>
is responsible for setting properties.
<li><code>org.apache.tools.ant.PropertyHelper$PropertySetter</code> is responsible for setting
properties.

<p>This is the interface you'd implement if you want to provide
your own storage independent of Ant's project instance&mdash;the
interface represents the reading end. An example for this
would
be <code>org.apache.tools.ant.property.LocalProperties</code>
which implements storage
for <a href="Tasks/local.html">local properties</a>.</p>
<p>This is the interface you'd implement if you want to provide your own storage independent
of Ant's project instance&mdash;the interface represents the reading end. An example for
this would be <code>org.apache.tools.ant.property.LocalProperties</code> which implements
storage for <a href="Tasks/local.html">local properties</a>.</p>
</li>

</ul>
@@ -195,10 +175,9 @@ public class DefaultExpander implements PropertyExpander {
}
}</pre>

<p>The logic that replaces <samp>${toString:<i>some-id</i>}</samp> with the
stringified representation of the object with
<var>id</var> <samp>some-id</samp> inside the current build is contained in a
PropertyEvaluator similar to the following code:</p>
<p>The logic that replaces <samp>${toString:<i>some-id</i>}</samp> with the stringified
representation of the object with <var>id</var> <samp>some-id</samp> inside the current build is
contained in a PropertyEvaluator similar to the following code:</p>

<pre>
public class ToStringEvaluator implements PropertyHelper.PropertyEvaluator {
@@ -215,22 +194,17 @@ public class ToStringEvaluator implements PropertyHelper.PropertyEvaluator {

<h1>Property Expansion</h1>

<p>When Ant encounters a construct <samp>${some-text}</samp> the
exact parsing semantics are subject to the configured property
helper delegates.</p>
<p>When Ant encounters a construct <samp>${some-text}</samp> the exact parsing semantics are
subject to the configured property helper delegates.</p>

<h2><code>$$</code> Expansion</h2>

<p>In its default configuration Ant will expand the text <q>$$</q>
to a single <q>$</q> and suppress the normal property expansion
mechanism for the text immediately following it,
i.e. <samp>$${key}</samp> expands to <samp>${key}</samp> and
not <code>value</code> even though a property
named <code>key</code> was defined and had the
value <samp>value</samp>. This can be used to escape
literal <q>$</q> characters and is useful in constructs that only
look like property expansions or when you want to provide
diagnostic output like in</p>
<p>In its default configuration Ant will expand the text <q>$$</q> to a single <q>$</q> and
suppress the normal property expansion mechanism for the text immediately following it,
i.e. <samp>$${key}</samp> expands to <samp>${key}</samp> and not <code>value</code> even though
a property named <code>key</code> was defined and had the value <samp>value</samp>. This can be
used to escape literal <q>$</q> characters and is useful in constructs that only look like
property expansions or when you want to provide diagnostic output like in</p>

<pre>&lt;echo&gt;$${builddir}=${builddir}&lt;/echo&gt;</pre>

@@ -238,65 +212,50 @@ public class ToStringEvaluator implements PropertyHelper.PropertyEvaluator {

<pre>${builddir}=build/classes</pre>

<p>if the property <code>builddir</code> has the
value <samp>build/classes</samp>.</p>
<p>if the property <code>builddir</code> has the value <samp>build/classes</samp>.</p>

<p>In order to maintain backward compatibility with older Ant
releases, a single <q>$</q> character encountered apart from a
property-like construct (including a matched pair of french
braces) will be interpreted literally; that is, as <q>$</q>. The
"correct" way to specify this literal character, however, is by
using the escaping mechanism unconditionally, so that <q>$$</q> is
obtained by specifying <q>$$$$</q>. Mixing the two approaches
yields unpredictable results, as <q>$$$</q> results
in <q>$$</q>.</p>
<p>In order to maintain backward compatibility with older Ant releases, a single <q>$</q>
character encountered apart from a property-like construct (including a matched pair of french
braces) will be interpreted literally; that is, as <q>$</q>. The "correct" way to specify this
literal character, however, is by using the escaping mechanism unconditionally, so
that <q>$$</q> is obtained by specifying <q>$$$$</q>. Mixing the two approaches yields
unpredictable results, as <q>$$$</q> results in <q>$$</q>.</p>

<h2>Nesting of Braces</h2>

<p>In its default configuration Ant will not try to balance braces
in property expansions, it will only consume the text up to the
first closing brace when creating a property name. I.e. when
expanding something like <samp>${a${b}}</samp> it will be
translated into two parts:</p>
<p>In its default configuration Ant will not try to balance braces in property expansions, it will
only consume the text up to the first closing brace when creating a property name. I.e. when
expanding something like <samp>${a${b}}</samp> it will be translated into two parts:</p>

<ol>
<li>the expansion of property <samp>a${b</samp>&mdash;likely nothing
useful.</li>
<li>the literal text <samp>}</samp> resulting from the second
closing brace</li>
<li>the expansion of property <samp>a${b</samp>&mdash;likely nothing useful.</li>
<li>the literal text <samp>}</samp> resulting from the second closing brace</li>
</ol>

<p>This means you can't use easily expand properties whose names are
given by properties, but there
are <a href="https://ant.apache.org/faq.html#propertyvalue-as-name-for-property">some
workarounds</a> for older versions of Ant. With Ant 1.8.0 and the
<a href="https://ant.apache.org/antlib/props/">the props Antlib</a>
you can configure Ant to use
the <code>NestedPropertyExpander</code> defined there if you need
such a feature.</p>
<p>This means you can't use easily expand properties whose names are given by properties, but
there are <a href="https://ant.apache.org/faq.html#propertyvalue-as-name-for-property"
target="_top">some workarounds</a> for older versions of Ant. With Ant 1.8.0 and
the <a href="https://ant.apache.org/antlib/props/" target="_top">the props Antlib</a> you can
configure Ant to use the <code>NestedPropertyExpander</code> defined there if you need such a
feature.</p>

<h2>Expanding a "Property Name"</h2>

<p>In its most simple form <samp>${key}</samp> is supposed to look
up a property named <code>key</code> and expand to the value of
the property. Additional <code>PropertyEvaluator</code>s may
result in a different interpretation of <code>key</code>,
though.</p>
<p>In its most simple form <samp>${key}</samp> is supposed to look up a property
named <code>key</code> and expand to the value of the property.
Additional <code>PropertyEvaluator</code>s may result in a different interpretation
of <code>key</code>, though.</p>

<p>The <a href="https://ant.apache.org/antlibs/props/">props Antlib</a>
provides a few interesting evaluators but there are
also a few built-in ones.</p>
<p>The <a href="https://ant.apache.org/antlibs/props/" target="_top">props Antlib</a> provides a
few interesting evaluators but there are also a few built-in ones.</p>

<h3 id="toString">Getting the value of a Reference with
<samp>${toString:}</samp></h3>
<h3 id="toString">Getting the value of a Reference with <samp>${toString:}</samp></h3>

<p>Any Ant type which has been declared with a reference can also
its string value extracted by using the <samp>${toString:}</samp>
operation, with the name of the reference listed after
the <code>toString:</code> text. The <code>toString()</code>
method of the Java class instance that is referenced is
invoked&mdash;all built in types strive to produce useful and
relevant output in such an instance.</p>
<p>Any Ant type which has been declared with a reference can also its string value extracted by
using the <samp>${toString:}</samp> operation, with the name of the reference listed after
the <code>toString:</code> text. The <code>toString()</code> method of the Java class instance
that is referenced is invoked&mdash;all built in types strive to produce useful and relevant
output in such an instance.</p>

<p>For example, here is how to get a listing of the files in a fileset,<p>

@@ -304,49 +263,42 @@ public class ToStringEvaluator implements PropertyHelper.PropertyEvaluator {
&lt;fileset id=&quot;sourcefiles&quot; dir=&quot;src&quot; includes=&quot;**/*.java&quot;/&gt;
&lt;echo&gt; sourcefiles = ${toString:sourcefiles} &lt;/echo&gt;</pre>

<p>There is no guarantee that external types provide meaningful
information in such a situation</p>
<p>There is no guarantee that external types provide meaningful information in such a
situation</p>

<h3 id="ant.refid">Getting the value of a Reference with <samp>${ant.refid:}</samp></h3>

<p>Any Ant type which has been declared with a reference can also be
used as a property by using the <samp>${ant.refid:}</samp>
operation, with the name of the reference listed after
the <code>ant.refid:</code> text. The difference between this
operation and <a href="#toString"><samp>${toString:}</samp></a> is
that <samp>${ant.refid:}</samp> will expand to the referenced
object itself. In most circumstances the <code>toString</code>
method will be invoked anyway, for example if
the <samp>${ant.refid:}</samp> is surrounded by other text.</p>
<p>Any Ant type which has been declared with a reference can also be used as a property by using
the <samp>${ant.refid:}</samp> operation, with the name of the reference listed after
the <code>ant.refid:</code> text. The difference between this operation
and <a href="#toString"><samp>${toString:}</samp></a> is that <samp>${ant.refid:}</samp> will
expand to the referenced object itself. In most circumstances the <code>toString</code> method
will be invoked anyway, for example if the <samp>${ant.refid:}</samp> is surrounded by other
text.</p>

<p>This syntax is most useful when using a task with attribute
setters that accept objects other than String. For example, if
the setter accepts a Resource object as in</p>
<p>This syntax is most useful when using a task with attribute setters that accept objects other
than String. For example, if the setter accepts a Resource object as in</p>

<pre>public void setAttr(Resource r) { ... }</pre>

<p>then the syntax can be used to pass in resource subclasses
previously defined as references like</p>
<p>then the syntax can be used to pass in resource subclasses previously defined as references
like</p>
<pre>
&lt;url url="http://ant.apache.org/" id="anturl"/&gt;
&lt;my:task attr="${ant.refid:anturl}"/&gt;</pre>

<h2 id="if+unless">If/Unless Attributes</h2>
<p>
The <code>&lt;target&gt;</code> element and various tasks (such
as <code>&lt;fail&gt;</code>) and task elements (such
as <code>&lt;test&gt;</code> in <code>&lt;junit&gt;</code>)
support <var>if</var> and <var>unless</var> attributes which can
be used to control whether the item is run or otherwise takes
effect.
The <code>&lt;target&gt;</code> element and various tasks (such as <code>&lt;fail&gt;</code>)
and task elements (such as <code>&lt;test&gt;</code> in <code>&lt;junit&gt;</code>)
support <var>if</var> and <var>unless</var> 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&mdash;even to be the empty string
or <q>false</q>&mdash;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):
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&mdash;even to be the empty string
or <q>false</q>&mdash;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>
&lt;target name="-check-use-file"&gt;
@@ -357,16 +309,14 @@ public class ToStringEvaluator implements PropertyHelper.PropertyEvaluator {
&lt;/target>
&lt;target name="lots-of-stuff" depends="use-file,other-unconditional-stuff"/&gt;</pre>
<p>
<em>Since Ant 1.8.0</em>, you may instead use property expansion;
a value of <q>true</q> (or <q>on</q> or <q>yes</q>) will enable
the item, while <q>false</q> (or <q>off</q> or <q>no</q>) 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.
<em>Since Ant 1.8.0</em>, you may instead use property expansion; a value of <q>true</q>
(or <q>on</q> or <q>yes</q>) will enable the item, while <q>false</q> (or <q>off</q>
or <q>no</q>) 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:
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>
&lt;target name="-check-use-file" <strong>unless="file.exists"</strong>&gt;
@@ -377,9 +327,8 @@ public class ToStringEvaluator implements PropertyHelper.PropertyEvaluator {
&lt;/target>
&lt;target name="lots-of-stuff" depends="use-file,other-unconditional-stuff"/&gt;</pre>
<p>
Now <code>ant -Dfile.exists=false lots-of-stuff</code> will
run <q>other-unconditional-stuff</q> but not <q>use-file</q>, as
you might expect, and you can disable the condition from another
Now <code>ant -Dfile.exists=false lots-of-stuff</code> will run <q>other-unconditional-stuff</q>
but not <q>use-file</q>, as you might expect, and you can disable the condition from another
script too:
</p>
<pre>
@@ -387,12 +336,10 @@ public class ToStringEvaluator implements PropertyHelper.PropertyEvaluator {
&lt;param name="file.exists" value="false"/&gt;
&lt;/antcall&gt;</pre>
<p>
Similarly, an <var>unless</var> attribute disables the item if it
is either the name of property which is defined, or if it
evaluates to a <q>true</q>-like value. For example, the following
allows you to define <code>skip.printing.message=true</code>
in <samp>my-prefs.properties</samp> with the results you might
expect:
Similarly, an <var>unless</var> attribute disables the item if it is either the name of property
which is defined, or if it evaluates to a <q>true</q>-like value. For example, the following
allows you to define <code>skip.printing.message=true</code> in <samp>my-prefs.properties</samp>
with the results you might expect:
</p>
<pre>
&lt;property file="my-prefs.properties"/&gt;


+ 6
- 5
manual/proxy.html View File

@@ -234,10 +234,10 @@ For csh/tcsh:

<p>
Any program that is executed with <code>&lt;java&gt;</code> without
setting <var>fork</var>=<q>true</q> will pick up the Ant's
settings. If you need different values,
set <var>fork</var>=<q>false</q> and provide the values
in <code>&lt;sysproperty&gt;</code> elements.
setting <var>fork</var>=<q>true</q> will pick up the Ant's
settings. If you need different values,
set <var>fork</var>=<q>false</q> and provide the values
in <code>&lt;sysproperty&gt;</code> elements.
</p>
<p>
If you wish to have a forked process pick up the Ant's settings, use
@@ -282,7 +282,8 @@ For csh/tcsh:
<h4>Further reading</h4>

<ul>
<li><a href="https://docs.oracle.com/javase/8/docs/technotes/guides/net/properties.html">Java Networking Properties</a>.</li>
<li><a href="https://docs.oracle.com/javase/8/docs/technotes/guides/net/properties.html"
target="_top">Java Networking Properties</a>.</li>
</ul>

</body>


+ 4
- 5
manual/running.html View File

@@ -404,10 +404,9 @@ properties are available via Project instance, I searched for them with a</p>
for <var>srcencoding</var>, <var>destencoding</var>
and <var>bundleencoding</var>
in <a href="Tasks/translate.html">translate</a><br/> see JavaDoc
of <a target="_blank"
href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html">java.nio.charset.Charset</a>
for more information about character sets (not used in Ant, but
has nice docs).
of <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html"
target="_top">java.nio.charset.Charset</a> for more information
about character sets (not used in Ant, but has nice docs).
</td>
</tr>
<tr>
@@ -416,7 +415,7 @@ properties are available via Project instance, I searched for them with a</p>
<td>The specified path is added to the classpath if Jikes is used as compiler.</td>
</tr>
<tr>
<td><code>MailLogger.properties.file, MailLogger.*</code></td>
<td><code>MailLogger.properties.file</code>, <code>MailLogger.*</code></td>
<td>filename (optional, defaults derived from Project instance)</td>
<td>Name of the file holding properties for sending emails by
the <a href="listeners.html#MailLogger">MailLogger</a>. Override


+ 26
- 28
manual/tasksoverview.html View File

@@ -172,10 +172,10 @@ documentation.</p>
<tr>
<td><a href="Tasks/jdepend.html">JDepend</a></td>
<td><p>Invokes
the <a href="http://www.clarkware.com/software/JDepend.html">
JDepend</a> parser. This parser &quot;traverses a set of Java
source-file directories and generates design-quality metrics for
each Java package&quot;.</p></td>
the <a href="http://www.clarkware.com/software/JDepend.html"
target="_top">JDepend</a> parser. This parser &quot;traverses a
set of Java source-file directories and generates design-quality
metrics for each Java package&quot;.</p></td>
</tr>
</table>

@@ -520,8 +520,7 @@ documentation.</p>
</tr>

<tr>
<td><a href="Tasks/replaceregexp.html">
ReplaceRegExp</a></td>
<td><a href="Tasks/replaceregexp.html">ReplaceRegExp</a></td>
<td><p>Replaces the occurrence of a given regular expression with
a substitution pattern in a file or set of files.</p></td>
</tr>
@@ -788,23 +787,24 @@ documentation.</p>

<tr>
<td><a href="Tasks/jjdoc.html">JJDoc</a></td>
<td><p>Invokes the <a href="https://javacc.org/">JJDoc</a>
documentation generator for the JavaCC compiler-compiler. JJDoc
takes a JavaCC parser specification and produces documentation
for the BNF grammar. It can operate in three modes, determined
by command line options. This task only invokes JJDoc if the
grammar file is newer than the generated BNF grammar
documentation.</p></td>
<td><p>Invokes the <a href="https://javacc.org/"
target="_top">JJDoc</a> documentation generator for the JavaCC
compiler-compiler. JJDoc takes a JavaCC parser specification and
produces documentation for the BNF grammar. It can operate in
three modes, determined by command line options. This task only
invokes JJDoc if the grammar file is newer than the generated BNF
grammar documentation.</p></td>
</tr>

<tr>
<td><a href="Tasks/jjtree.html">JJTree</a></td>
<td><p>Invokes the <a href="https://javacc.org/">JJTree</a>
preprocessor for the JavaCC compiler-compiler. It inserts
parse-tree building actions at various places in the JavaCC
source that it generates. The output of JJTree is run through
JavaCC to create the parser. This task only invokes JJTree if the
grammar file is newer than the generated JavaCC file.</p></td>
<td><p>Invokes the <a href="https://javacc.org/"
target="_top">JJTree</a> preprocessor for the JavaCC
compiler-compiler. It inserts parse-tree building actions at
various places in the JavaCC source that it generates. The output
of JJTree is run through JavaCC to create the parser. This task
only invokes JJTree if the grammar file is newer than the
generated JavaCC file.</p></td>
</tr>

<tr>
@@ -813,8 +813,7 @@ documentation.</p>
</tr>

<tr>
<td><a href="Tasks/native2ascii.html">
Native2Ascii</a></td>
<td><a href="Tasks/native2ascii.html">Native2Ascii</a></td>
<td><p>Converts files from native encodings to ASCII with escaped
Unicode. A common usage is to convert source files maintained in
a native operating system encoding to ASCII, prior to
@@ -919,8 +918,7 @@ documentation.</p>
</tr>

<tr>
<td><a href="Tasks/propertyfile.html">
PropertyFile</a></td>
<td><a href="Tasks/propertyfile.html">PropertyFile</a></td>
<td><p>Creates or modifies property files. Useful when wanting to
make unattended modifications to configuration files for
application servers and applications. Typically used for things
@@ -1050,8 +1048,7 @@ documentation.</p>
</tr>

<tr>
<td><a href="Tasks/vss.html">
Microsoft Visual SourceSafe</a></td>
<td><a href="Tasks/vss.html">Microsoft Visual SourceSafe</a></td>
<td><p>Tasks to perform the Visual SourceSafe <em>vssget</em>,
<em>vsslabel</em>, <em>vsshistory</em>, <em>vsscheckin</em>,
<em>vsscheckout</em>, <em>vssadd</em>, <em>vsscp</em>,
@@ -1084,9 +1081,10 @@ documentation.</p>

<tr>
<td><a href="Tasks/junit.html">Junit</a></td>
<td><p>Runs tests from the <a href="https://junit.org">Junit</a>
testing framework. This task has been tested with JUnit 3.0 and
later; it won't work with versions prior to JUnit 3.0.</p></td>
<td><p>Runs tests from the <a href="https://junit.org"
target="_top">Junit</a> testing framework. This task has been
tested with JUnit 3.0 and later; it won't work with versions
prior to JUnit 3.0.</p></td>
</tr>

<tr>


+ 15
- 13
manual/tutorial-HelloWorldWithAnt.html View File

@@ -244,13 +244,13 @@ because</p>
<li>it's from Apache ;-)</li>
</ul>
<p>We store our external libraries in a new directory <samp>lib</samp>. Log4J can
be <a href="https://archive.apache.org/dist/logging/log4j/1.2.17/logging-log4j-1.2.17.zip">downloaded [1]</a> from
Logging's Homepage. Create the <samp>lib</samp> directory and extract the <samp>log4j-1.2.17.jar</samp> into that
directory. After that we have to modify our Java source file to use that library and our buildfile so that this library
could be accessed during compilation and run.</p>
<p>Working with Log4J is documented inside its manual. Here we use the <var>MyApp</var>-example from
the <a href="https://logging.apache.org/log4j/1.2/manual.html">Short Manual [2]</a>. First we have to modify the java
source to use the logging framework:</p>
be <a href="https://archive.apache.org/dist/logging/log4j/1.2.17/logging-log4j-1.2.17.zip" target="_top">downloaded
[1]</a> from Logging's Homepage. Create the <samp>lib</samp> directory and extract the <samp>log4j-1.2.17.jar</samp>
into that directory. After that we have to modify our Java source file to use that library and our buildfile so that
this library could be accessed during compilation and run.</p>
<p>Working with Log4J is documented inside its manual. Here we use the <samp>MyApp</samp>-example from
the <a href="https://logging.apache.org/log4j/1.2/manual.html" target="_top">Short Manual [2]</a>. First we have to
modify the java source to use the logging framework:</p>

<pre class="code">
package oata;
@@ -413,9 +413,9 @@ junit instruction to our buildfile:</p>
...</pre>

<p>We reuse the path to our own jar file as defined in run-target by giving it an ID and making it globally available.
The <code>printsummary=yes</code> lets us see more detailed information than just a "FAILED" or "PASSED" message. How
much tests failed? Some errors? <var>printsummary</var> lets us know. The classpath is set up to find our classes. To
run tests the <code>batchtest</code> here is used, so you could easily add more test classes in the future just by
The <var>printsummary</var>=<q>yes</q> lets us see more detailed information than just a "FAILED" or "PASSED" message.
How much tests failed? Some errors? <var>printsummary</var> lets us know. The classpath is set up to find our classes.
To run tests the <code>batchtest</code> here is used, so you could easily add more test classes in the future just by
naming them <code>*Test.java</code>. This is a common naming scheme.</p>

<p>After a <code>ant junit</code> you'll get:</p>
@@ -470,9 +470,11 @@ don't need the HTML report just for testing, e.g. if you are fixing an error or

<h2 id="resources">Resources</h2>
<ol class="refs">
<li><a href="https://archive.apache.org/dist/logging/log4j/1.2.17/logging-log4j-1.2.17.zip">https://archive.apache.org/dist/logging/log4j/1.2.17/logging-log4j-1.2.17.zip</a></li>
<li><a href="https://logging.apache.org/log4j/1.2/manual.html">https://logging.apache.org/log4j/1.2/manual.html</a></li>
<li><a href="https://junit.org/junit4">https://junit.org/junit4</a></li>
<li><a href="https://archive.apache.org/dist/logging/log4j/1.2.17/logging-log4j-1.2.17.zip"
target="_top">https://archive.apache.org/dist/logging/log4j/1.2.17/logging-log4j-1.2.17.zip</a></li>
<li><a href="https://logging.apache.org/log4j/1.2/manual.html"
target="_top">https://logging.apache.org/log4j/1.2/manual.html</a></li>
<li><a href="https://junit.org/junit4" target="_top">https://junit.org/junit4</a></li>
</ol>

</body>


+ 33
- 27
manual/tutorial-tasks-filesets-properties.html View File

@@ -322,8 +322,8 @@ the <code>&lt;path&gt;</code>. Filesets are easy if the files are all under a co
the case, you have a problem. Another disadvantage is its speed: if you have only a few files in a huge directory
structure, why not use a <code>&lt;filelist&gt;</code> instead? <code>&lt;path&gt;</code>s combines these datatypes in
that way that a path contains other paths, filesets, dirsets and filelists. This is
why <a href="http://ant-contrib.sourceforge.net/">Ant-Contrib [4]</a> <code>&lt;foreach&gt;</code> task is modified to
support paths instead of filesets. So we want that, too.</p>
why <a href="http://ant-contrib.sourceforge.net/" target="_top">Ant-Contrib [4]</a> <code>&lt;foreach&gt;</code> task is
modified to support paths instead of filesets. So we want that, too.</p>

<p>Changing from fileset to path support is very easy:</p>
<em><strong>Change Java code from:</strong></em>
@@ -659,8 +659,8 @@ After that it prints out the result (e.g. &lt;samp&gt;C:/ant-1.5.4/bin/ant.jar;C
<li>create a patch file</li>
<li>publishing that patch file</li>
</ul>
<p>The <a href="https://ant.apache.org/ant_task_guidelines.html">Ant Task Guidelines [6]</a> support additional
information on that.</p>
<p>The <a href="https://ant.apache.org/ant_task_guidelines.html" target="_top">Ant Task Guidelines [6]</a> support
additional information on that.</p>

<p>Now we will check the "Checklist before submitting a new task" described in that guideline.</p>
<ul>
@@ -762,7 +762,7 @@ after <code>git clone</code> (without our modifications).</p>
<h3>Test on JDK 5</h3>
<p>Ant 1.10 uses Java 8 for development, but Ant 1.9 is actively maintained, too. That means that Ant code must be able
to run on a JDK 5. So we have to test that. You can download older JDKs
from <a href="https://www.oracle.com/technetwork/java/archive-139210.html">Oracle [8]</a>.</p>
from <a href="https://www.oracle.com/technetwork/java/archive-139210.html" target="_top">Oracle [8]</a>.</p>

<p>Clean the <code>ANT_HOME</code> variable, delete the <samp>build</samp>, <samp>bootstrap</samp> and <samp>dist</samp>
directories, and point <code>JAVA_HOME</code> to the JDK 5 home directory. Then create the patch with your commit,
@@ -773,11 +773,11 @@ run <code>ant test</code> (like above).</p>

<h3>Checkstyle</h3>
<p>There are many things we have to ensure. Indentation with 4 spaces, blanks here and there, ... (all described in
the <a href="https://ant.apache.org/ant_task_guidelines.html">Ant Task Guidelines [6]</a> which includes
the <a href="https://www.oracle.com/technetwork/java/codeconvtoc-136057.html">Sun code style [9]</a>). Because there are
so many things we would be happy to have a tool for do the checks. There is one: checkstyle. Checkstyle is available
at <a href="http://checkstyle.sourceforge.net/"> Sourceforge [10]</a> and Ant provides with the <samp>check.xml</samp> a
buildfile which will do the job for us.</p>
the <a href="https://ant.apache.org/ant_task_guidelines.html" target="_top">Ant Task Guidelines [6]</a> which includes
the <a href="https://www.oracle.com/technetwork/java/codeconvtoc-136057.html" target="_top">Sun code style
[9]</a>). Because there are so many things we would be happy to have a tool for do the checks. There is one:
checkstyle. Checkstyle is available at <a href="http://checkstyle.sourceforge.net/" target="_top">Sourceforge [10]</a>
and Ant provides with the <samp>check.xml</samp> a buildfile which will do the job for us.</p>

<p>Download it and put the <samp>checkstyle-*-all.jar</samp> into your <samp>%USERPROFILE%\.ant\lib</samp> directory.
All jar's stored there are available to Ant so you haven't to add it to you <samp>%ANT_HOME%\lib</samp> directory (this
@@ -796,9 +796,9 @@ will find the next error place much more easier without redoing the checkstyle.<
run. Now our task isn't listed. That's fine :-)</p>

<h3>Publish the task</h3>
<p>Finally we publish that archive. As described in the <a href="https://ant.apache.org/ant_task_guidelines.html">Ant
Task Guidelines [7]</a> we can announce it on the developer mailing list, create a BugZilla entry and open a GitHub pull
request. For both we need some information:</p>
<p>Finally we publish that archive. As described in the <a href="https://ant.apache.org/ant_task_guidelines.html"
target="_top">Ant Task Guidelines [7]</a> we can announce it on the developer mailing list, create a BugZilla entry and
open a GitHub pull request. For both we need some information:</p>

<table>
<tr>
@@ -826,13 +826,14 @@ request. For both we need some information:</p>
more difficult. But the advantage is that entries will not be forgotten (a report is generated once every weekend). So
I will describe the process.</p>

<p>First, you must have a BugZilla account. So open the <a href="https://issues.apache.org/bugzilla/">BugZilla Main Page
[11]</a> and follow the link <a href="https://issues.apache.org/bugzilla/createaccount.cgi">Open a new Bugzilla account
[12]</a> and the steps described there if you haven't one.</p>
<p>First, you must have a BugZilla account. So open the <a href="https://issues.apache.org/bugzilla/"
target="_top">BugZilla Main Page [11]</a> and follow the
link <a href="https://issues.apache.org/bugzilla/createaccount.cgi" target="_top">Open a new Bugzilla account [12]</a>
and the steps described there if you haven't one.</p>

<ol>
<li>From the BugZilla main page choose <a href="https://issues.apache.org/bugzilla/enter_bug.cgi">Enter a new bug report
[13]</a></li>
<li>From the BugZilla main page choose <a href="https://issues.apache.org/bugzilla/enter_bug.cgi" target="_top">Enter a
new bug report [13]</a></li>
<li>Choose "Ant" as product</li>
<li>Version is the last "Alpha (nightly)" (at this time 1.10)</li>
<li>Component is "Core tasks"</li>
@@ -854,16 +855,21 @@ I will describe the process.</p>
<li><a href="tutorial-writing-tasks.html">tutorial-writing-tasks.html</a></li>
<li><a href="tutorial-tasks-filesets-properties.zip">tutorial-tasks-filesets-properties.zip</a></li>
<li><a href="properties.html#built-in-props">properties.html#built-in-props</a></li>
<li><a href="http://ant-contrib.sourceforge.net/">http://ant-contrib.sourceforge.net/</a></li>
<li><a href="http://ant-contrib.sourceforge.net/" target="_top">http://ant-contrib.sourceforge.net/</a></li>
<li><a href="Tasks/java.html">Tasks/java.html</a></li>
<li><a href="https://ant.apache.org/ant_task_guidelines.html">https://ant.apache.org/ant_task_guidelines.html</a></li>
<li><a href="https://github.com/apache/ant">https://github.com/apache/ant</a></li>
<li><a href="https://www.oracle.com/technetwork/java/archive-139210.html">https://www.oracle.com/technetwork/java/archive-139210.html</a></li>
<li><a href="https://www.oracle.com/technetwork/java/codeconvtoc-136057.html">https://www.oracle.com/technetwork/java/codeconvtoc-136057.html</a></li>
<li><a href="http://checkstyle.sourceforge.net/">http://checkstyle.sourceforge.net/</a></li>
<li><a href="https://issues.apache.org/bugzilla/">https://issues.apache.org/bugzilla/</a></li>
<li><a href="https://issues.apache.org/bugzilla/createaccount.cgi">https://issues.apache.org/bugzilla/createaccount.cgi</a></li>
<li><a href="https://issues.apache.org/bugzilla/enter_bug.cgi">https://issues.apache.org/bugzilla/enter_bug.cgi</a></li>
<li><a href="https://ant.apache.org/ant_task_guidelines.html"
target="_top">https://ant.apache.org/ant_task_guidelines.html</a></li>
<li><a href="https://github.com/apache/ant" target="_top">https://github.com/apache/ant</a></li>
<li><a href="https://www.oracle.com/technetwork/java/archive-139210.html"
target="_top">https://www.oracle.com/technetwork/java/archive-139210.html</a></li>
<li><a href="https://www.oracle.com/technetwork/java/codeconvtoc-136057.html"
target="_top">https://www.oracle.com/technetwork/java/codeconvtoc-136057.html</a></li>
<li><a href="http://checkstyle.sourceforge.net/" target="_top">http://checkstyle.sourceforge.net/</a></li>
<li><a href="https://issues.apache.org/bugzilla/" target="_top">https://issues.apache.org/bugzilla/</a></li>
<li><a href="https://issues.apache.org/bugzilla/createaccount.cgi"
target="_top">https://issues.apache.org/bugzilla/createaccount.cgi</a></li>
<li><a href="https://issues.apache.org/bugzilla/enter_bug.cgi"
target="_top">https://issues.apache.org/bugzilla/enter_bug.cgi</a></li>
</ol>

</body>


+ 6
- 6
manual/tutorial-writing-tasks.html View File

@@ -99,7 +99,7 @@ fail; <q>jar</q> requires the execution of some steps before. So the refactored
&lt;/target&gt;

&lt;/project&gt;</pre>
<p><code>ant.project.name</code> is one of the <a href="properties.html#built-in-props" target="_blank">build-in
<p><code>ant.project.name</code> is one of the <a href="properties.html#built-in-props" target="_top">build-in
properties [1]</a> of Ant.</p>

<h2 id="write1">Write the Task</h2>
@@ -117,7 +117,7 @@ attribute the <q>compile</q> is executed before).</p>

<h2 id="use1">Use the Task</h2>
<p>But after creating the jar we want to use our new Task. Therefore we need a new target <q>use</q>. Before we can use
our new task we have to declare it with <a href="Tasks/taskdef.html" target="_blank"><code>&lt;taskdef&gt;</code>
our new task we have to declare it with <a href="Tasks/taskdef.html" target="_top"><code>&lt;taskdef&gt;</code>
[2]</a>. And for easier process we change the <var>default</var> attribute:</p>
<pre class="code">
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
@@ -724,9 +724,8 @@ of your custom task. Then set breakpoints in other methods. This will ensure t
JVM.</p>

<h2 id="resources">Resources</h2>
<p>This tutorial and its resources are available
via <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=22570">BugZilla [5]</a>. The ZIP provided there
contains</p>
<p>This tutorial and its resources are available via <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=22570"
target="_top">BugZilla [5]</a>. The ZIP provided there contains</p>
<ul>
<li>this initial version of this tutorial</li>
<li>the buildfile (last version)</li>
@@ -746,7 +745,8 @@ the manual.</p>
<li><a href="Tasks/taskdef.html">https://ant.apache.org/manual/Tasks/taskdef.html</a></li>
<li><a href="develop.html#set-magic">https://ant.apache.org/manual/develop.html#set-magic</a></li>
<li><a href="develop.html#nested-elements">https://ant.apache.org/manual/develop.html#nested-elements</a></li>
<li><a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=22570">https://issues.apache.org/bugzilla/show_bug.cgi?id=22570</a></li>
<li><a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=22570"
target="_top">https://issues.apache.org/bugzilla/show_bug.cgi?id=22570</a></li>
<li><a href="tutorial-writing-tasks-src.zip">tutorial-writing-tasks-src.zip</a></li>
</ol>



+ 149
- 239
manual/using.html View File

@@ -25,12 +25,10 @@
<body>
<h1>Using Apache Ant</h1>
<h2 id="buildfile">Writing a Simple Buildfile</h2>
<p>Apache Ant's buildfiles are written in XML. Each buildfile contains one project
and at least one (default) target. Targets contain task elements.
Each task element of the buildfile can have an <var>id</var> attribute and
can later be referred to by the value supplied to this. The value has
to be unique. (For additional information, see the
<a href="#tasks">Tasks</a> section below.)</p>
<p>Apache Ant's buildfiles are written in XML. Each buildfile contains one project and at least one (default)
target. Targets contain task elements. Each task element of the buildfile can have an <var>id</var> attribute and can
later be referred to by the value supplied to this. The value has to be unique. (For additional information, see
the <a href="#tasks">Tasks</a> section below.)</p>

<h3 id="projects">Projects</h3>
<p>A <em>project</em> has three attributes:</p>
@@ -48,93 +46,69 @@ to be unique. (For additional information, see the
<tr>
<td>default</td>
<td>the default target to use when no target is supplied.</td>
<td>No; however, <em>since Ant 1.6.0</em>,
every project includes an implicit target that contains any and
all top-level tasks and/or types. This target will always be
executed as part of the project's initialization, even when Ant is
run with the <a href="running.html#options"><code>-projecthelp</code></a> option.
<td>No; however, <em>since Ant 1.6.0</em>, every project includes an implicit target that contains any and all
top-level tasks and/or types. This target will always be executed as part of the project's initialization, even
when Ant is run with the <a href="running.html#options"><code>-projecthelp</code></a> option.
</td>
</tr>
<tr>
<td>basedir</td>
<td>the base directory from which all path calculations are
done. A relative path is resolved relative to the directory containing
the buildfile.
<td>the base directory from which all path calculations are done. A relative path is resolved relative to the
directory containing the buildfile.
</td>
<td>No; defaults to the parent directory of the buildfile,
unless overridden by the project's <var>basedir</var> or the <code>basedir</code>
property</td>
<td>No; defaults to the parent directory of the buildfile, unless overridden by the project's <var>basedir</var> or
the <code>basedir</code> property</td>
</tr>
</table>
<p>Optionally, a description for the project can be provided as a
top-level <code>&lt;description&gt;</code> element (see the <a
href="Types/description.html">description</a> type).</p>
<p>Optionally, a description for the project can be provided as a top-level <code>&lt;description&gt;</code> element
(see the <a href="Types/description.html">description</a> type).</p>

<p>Each project defines one or more <em>targets</em>.
A target is a set of <em>tasks</em> you want
to be executed. When starting Ant, you can select which target(s) you
want to have executed. When no target is given,
the project's <var>default</var> is used.</p>
<p>Each project defines one or more <em>targets</em>. A target is a set of <em>tasks</em> you want to be executed. When
starting Ant, you can select which target(s) you want to have executed. When no target is given, the
project's <var>default</var> is used.</p>

<h3 id="targets">Targets</h3>
<p>A target can depend on other targets. You might have a target for compiling,
for example, and a target for creating a distributable. You can only build a
distributable when you have compiled first, so the distribute target
<p>A target can depend on other targets. You might have a target for compiling, for example, and a target for creating a
distributable. You can only build a distributable when you have compiled first, so the distribute target
<em>depends on</em> the compile target. Ant resolves these dependencies.</p>
<p>It should be noted, however, that Ant's <var>depends</var> attribute
only specifies the <em>order</em> in which targets should be executed&mdash;it
does not affect whether the target that specifies the dependency(s) gets
executed if the dependent target(s) did not (need to) run.
</p>
<p>It should be noted, however, that Ant's <var>depends</var> attribute only specifies the <em>order</em> in which
targets should be executed&mdash;it does not affect whether the target that specifies the dependency(s) gets executed if
the dependent target(s) did not (need to) run.</p>

<p>More information can be found in the dedicated <a href="targets.html">manual page</a>.</p>

<h3 id="tasks">Tasks</h3>
<p>A task is a piece of code that can be executed.</p>
<p>A task can have multiple attributes (or arguments, if you prefer). The value
of an attribute might contain references to a property. These references will be
resolved before the task is executed.</p>
<p>A task can have multiple attributes (or arguments, if you prefer). The value of an attribute might contain references
to a property. These references will be resolved before the task is executed.</p>
<p>Tasks have a common structure:</p>

<pre>&lt;<i>name</i> <var>attribute1</var>=&quot;<i>value1</i>&quot; <var>attribute2</var>=&quot;<i>value2</i>&quot; ... /&gt;</pre>

<p>where <code><i>name</i></code> is the name of the task,
<var>attributeN</var> is the attribute name, and
<code><i>valueN</i></code> is the value for this attribute.</p>
<p>There is a set of <a href="tasklist.html" target="navFrame">built-in tasks</a>, but it is also very
easy to <a href="develop.html#writingowntask">write your own</a>.</p>
<p>All tasks can have a <var>name</var> attribute. The value of
this attribute will be used in the logging messages generated by
Ant.</p>
Tasks can be assigned an <var>id</var> attribute:
<p>where <code><i>name</i></code> is the name of the task, <var>attributeN</var> is the attribute name,
and <code><i>valueN</i></code> is the value for this attribute.</p>
<p>There is a set of <a href="tasklist.html" target="navFrame">built-in tasks</a>, but it is also very easy
to <a href="develop.html#writingowntask">write your own</a>.</p>
<p>All tasks can have a <var>name</var> attribute. The value of this attribute will be used in the logging messages
generated by Ant.</p>
<p>Tasks can be assigned an <var>id</var> attribute:</p>

<pre>&lt;<i>taskname</i> <var>id</var>="<i>taskID</i>" ... /&gt;</pre>

where <code><i>taskname</i></code> is the name of the task, and <code><i>taskID</i></code> is
a unique identifier for this task.
You can refer to the
corresponding task object in scripts or other tasks via this name.
For example, in scripts you could do:
<p>where <code><i>taskname</i></code> is the name of the task, and <code><i>taskID</i></code> is a unique identifier for
this task. You can refer to the corresponding task object in scripts or other tasks via this name. For example, in
scripts you could do:</p>

<pre>
&lt;script ... &gt;
task1.setFoo("bar");
&lt;/script&gt;</pre>

to set the <code>foo</code> attribute of this particular task instance.
In another task (written in Java), you can access the instance via
<code>project.getReference("task1")</code>.
<p>
Note 1: If <q>task1</q> has not been run yet, then
it has not been configured (ie., no attributes have been set), and if it is
going to be configured later, anything you've done to the instance may
be overwritten.
</p>
<p>
Note 2: Future versions of Ant will most likely <em>not</em>
be backward-compatible with this behaviour, since there will likely be no
task instances at all, only proxies.
</p>
<p>to set the <code>foo</code> attribute of this particular task instance. In another task (written in Java), you can
access the instance via <code>project.getReference("task1")</code>.</p>
<p>Note 1: If <q>task1</q> has not been run yet, then it has not been configured (ie., no attributes have been set), and
if it is going to be configured later, anything you've done to the instance may be overwritten.</p>
<p>Note 2: Future versions of Ant will most likely <em>not</em> be backward-compatible with this behaviour, since there
will likely be no task instances at all, only proxies.</p>

<h3 id="properties">Properties</h3>

@@ -200,70 +174,49 @@ task instances at all, only proxies.
&lt;/target&gt;
&lt;/project&gt;</pre>

<p>Notice that we are declaring properties outside any target. <em>Since
Ant 1.6</em>, all tasks can be declared outside targets (earlier version
only allowed <code>&lt;property&gt;</code>, <code>&lt;typedef&gt;</code> and
<code>&lt;taskdef&gt;</code>). When you do this they are evaluated before
any targets are executed. Some tasks will generate build failures if
they are used outside of targets as they may cause infinite loops
otherwise (<code>&lt;antcall&gt;</code> for example).</p>

<p>
We have given some targets descriptions; this causes the <code>-projecthelp</code>
invocation option to list them as public targets with the descriptions; the
other target is internal and not listed.
<p>
Finally, for this target to work the source in the <samp>src</samp> subdirectory
should be stored in a directory tree which matches the package names. Check the
<code>&lt;javac&gt;</code> task for details.
<p>Notice that we are declaring properties outside any target. <em>Since Ant 1.6</em>, all tasks can be declared outside
targets (earlier version only allowed <code>&lt;property&gt;</code>, <code>&lt;typedef&gt;</code>
and <code>&lt;taskdef&gt;</code>). When you do this they are evaluated before any targets are executed. Some tasks
will generate build failures if they are used outside of targets as they may cause infinite loops otherwise
(<code>&lt;antcall&gt;</code> for example).</p>

<p>We have given some targets descriptions; this causes the <code>-projecthelp</code> invocation option to list them as
public targets with the descriptions; the other target is internal and not listed.</p>
<p>Finally, for this target to work the source in the <samp>src</samp> subdirectory should be stored in a directory tree
which matches the package names. Check the <code>&lt;javac&gt;</code> task for details.</p>

<h3 id="filters">Token Filters</h3>
<p>A project can have a set of tokens that might be automatically expanded if
found when a file is copied, when the filtering-copy behavior is selected in the
tasks that support this. These might be set in the buildfile
by the <a href="Tasks/filter.html">filter</a> task.</p>
<p>Since this can potentially be a very harmful behavior,
the tokens in the files <strong>must</strong>
be of the form <code>@<var>token</var>@</code>, where
<var>token</var> is the token name that is set
in the <code>&lt;filter&gt;</code> task. This token syntax matches the syntax of other build systems
that perform such filtering and remains sufficiently orthogonal to most
programming and scripting languages, as well as with documentation systems.</p>
<p><strong>Note</strong>: If a token with the format <code>@<var>token</var>@</code>
is found in a file, but no
filter is associated with that token, no changes take place;
therefore, no escaping
method is available&mdash;but as long as you choose appropriate names for your
tokens, this should not cause problems.</p>
<p><strong>Warning</strong>: If you copy binary files with filtering turned on, you can corrupt the
files. This feature should be used with text files <em>only</em>.</p>
<p>A project can have a set of tokens that might be automatically expanded if found when a file is copied, when the
filtering-copy behavior is selected in the tasks that support this. These might be set in the buildfile by
the <a href="Tasks/filter.html">filter</a> task.</p>
<p>Since this can potentially be a very harmful behavior, the tokens in the files <strong>must</strong> be of the
form <code>@<var>token</var>@</code>, where <var>token</var> is the token name that is set in
the <code>&lt;filter&gt;</code> task. This token syntax matches the syntax of other build systems that perform such
filtering and remains sufficiently orthogonal to most programming and scripting languages, as well as with documentation
systems.</p>
<p><strong>Note</strong>: If a token with the format <code>@<var>token</var>@</code> is found in a file, but no filter
is associated with that token, no changes take place; therefore, no escaping method is available&mdash;but as long as
you choose appropriate names for your tokens, this should not cause problems.</p>
<p><strong>Warning</strong>: If you copy binary files with filtering turned on, you can corrupt the files. This feature
should be used with text files <em>only</em>.</p>

<h3 id="path">Path-like Structures</h3>
<p>You can specify <code>PATH</code>- and <code>CLASSPATH</code>-type
references using both <q>:</q> and <q>;</q> as separator
characters. Ant will
convert the separator to the correct character of the current operating
system.</p>
<p>Wherever path-like values need to be specified, a nested element can
be used. This takes the general form of:</p>
<p>You can specify <code>PATH</code>- and <code>CLASSPATH</code>-type references using both <q>:</q> and <q>;</q> as
separator characters. Ant will convert the separator to the correct character of the current operating system.</p>
<p>Wherever path-like values need to be specified, a nested element can be used. This takes the general form of:</p>
<pre>
&lt;classpath&gt;
&lt;pathelement path=&quot;${classpath}&quot;/&gt;
&lt;pathelement location=&quot;lib/helper.jar&quot;/&gt;
&lt;/classpath&gt;</pre>
<p>The <var>location</var> attribute specifies a single file or
directory relative to the project's base directory (or an absolute
filename), while the <var>path</var> attribute accepts colon-
or semicolon-separated lists of locations. The <var>path</var>
attribute is intended to be used with predefined paths&mdash;in any other
case, multiple elements with <var>location</var> attributes should be
preferred.</p>
<p><em>Since Ant 1.8.2</em> the <var>location</var> attribute can also contain a
wildcard in its last path component (i.e. it can end in a
<q>*</q>) in order to support wildcard <code>CLASSPATH</code>s introduced
with Java 6. Ant will not expand or evaluate the wildcards and the
resulting path may not work as anything else but a <code>CLASSPATH</code>&mdash;or
even as a <code>CLASSPATH</code> for JVM prior to Java 6.</p>
<p>The <var>location</var> attribute specifies a single file or directory relative to the project's base directory (or
an absolute filename), while the <var>path</var> attribute accepts colon- or semicolon-separated lists of
locations. The <var>path</var> attribute is intended to be used with predefined paths&mdash;in any other case, multiple
elements with <var>location</var> attributes should be preferred.</p>
<p><em>Since Ant 1.8.2</em> the <var>location</var> attribute can also contain a wildcard in its last path component
(i.e. it can end in a <q>*</q>) in order to support wildcard <code>CLASSPATH</code>s introduced with Java 6. Ant will
not expand or evaluate the wildcards and the resulting path may not work as anything else but
a <code>CLASSPATH</code>&mdash;or even as a <code>CLASSPATH</code> for JVM prior to Java 6.</p>
<p>As a shortcut, the <code>&lt;classpath&gt;</code> tag
supports <var>path</var> and
<var>location</var> attributes of its own, so:</p>
@@ -274,16 +227,11 @@ supports <var>path</var> and
</pre>
<p>can be abbreviated to:</p>
<pre>&lt;classpath path=&quot;${classpath}&quot;/&gt;</pre>
<p>In addition, one or more
<a href="Types/resources.html#collection">resource collections</a>
can be specified as nested elements (these must consist of
<a href="Types/resources.html#file">file</a>-type resources only).
Additionally, it should be noted that although resource collections are
processed in the order encountered, certain resource collection types
such as <a href="Types/fileset.html">fileset</a>,
<a href="Types/dirset.html">dirset</a> and
<a href="Types/resources.html#files">files</a>
are undefined in terms of order.</p>
<p>In addition, one or more <a href="Types/resources.html#collection">resource collections</a> can be specified as
nested elements (these must consist of <a href="Types/resources.html#file">file</a>-type resources only). Additionally,
it should be noted that although resource collections are processed in the order encountered, certain resource
collection types such as <a href="Types/fileset.html">fileset</a>, <a href="Types/dirset.html">dirset</a>
and <a href="Types/resources.html#files">files</a> are undefined in terms of order.</p>
<pre>
&lt;classpath&gt;
&lt;pathelement path=&quot;${classpath}&quot;/&gt;
@@ -297,33 +245,24 @@ are undefined in terms of order.</p>
&lt;/dirset&gt;
&lt;filelist refid=&quot;third-party_jars&quot;/&gt;
&lt;/classpath&gt;</pre>
<p>This builds a path that holds the value of <samp>${classpath}</samp>,
followed by all jar files in the <samp>lib</samp> directory,
the <samp>classes</samp> directory, all directories named
<samp>classes</samp> under the <samp>apps</samp> subdirectory of
<samp>${build.dir}</samp>, except those
that have the text <code>Test</code> in their name, and
the files specified in the referenced FileList.</p>
<p>If you want to use the same path-like structure for several tasks,
you can define them with a <code>&lt;path&gt;</code> element at the
same level as <code>&lt;target&gt;</code>s, and reference them via their
<p>This builds a path that holds the value of <samp>${classpath}</samp>, followed by all jar files in
the <samp>lib</samp> directory, the <samp>classes</samp> directory, all directories named <samp>classes</samp> under
the <samp>apps</samp> subdirectory of <samp>${build.dir}</samp>, except those that have the text <code>Test</code> in
their name, and the files specified in the referenced FileList.</p>
<p>If you want to use the same path-like structure for several tasks, you can define them with
a <code>&lt;path&gt;</code> element at the same level as <code>&lt;target&gt;</code>s, and reference them via their
<var>id</var> attribute&mdash;see <a href="#references">References</a> for an
example.</p>

<p>By default a path-like structure will re-evaluate all nested
resource collections whenever it is used, which may lead to
unnecessary re-scanning of the filesystem. <em>Since Ant 1.8.0</em>, path has
an optional <var>cache</var> attribute, if it is set to <q>true</q>, the path
instance will only scan its nested resource collections once and
assume it doesn't change during the build anymore (the default
for <var>cache</var> still is <q>false</q>). Even if you are using the
path only in a single task it may improve overall performance to set
<var>cache</var> to <q>true</q> if you are using complex nested
constructs.</p>

<p>A path-like structure can include a reference to another path-like
structure (a path being itself a resource collection)
via nested <code>&lt;path&gt;</code> elements:</p>
<p>By default a path-like structure will re-evaluate all nested resource collections whenever it is used, which may lead
to unnecessary re-scanning of the filesystem. <em>Since Ant 1.8.0</em>, path has an optional <var>cache</var>
attribute, if it is set to <q>true</q>, the path instance will only scan its nested resource collections once and assume
it doesn't change during the build anymore (the default for <var>cache</var> still is <q>false</q>). Even if you are
using the path only in a single task it may improve overall performance to set <var>cache</var> to <q>true</q> if you
are using complex nested constructs.</p>

<p>A path-like structure can include a reference to another path-like structure (a path being itself a resource
collection) via nested <code>&lt;path&gt;</code> elements:</p>
<pre>
&lt;path id=&quot;base.path&quot;&gt;
&lt;pathelement path=&quot;${classpath}&quot;/&gt;
@@ -337,21 +276,18 @@ via nested <code>&lt;path&gt;</code> elements:</p>
&lt;path refid=&quot;base.path&quot;/&gt;
&lt;pathelement location=&quot;testclasses&quot;/&gt;
&lt;/path&gt;</pre>
The shortcuts previously mentioned for <code>&lt;classpath&gt;</code>
are also valid for <code>&lt;path&gt;</code>. For example:
<p>The shortcuts previously mentioned for <code>&lt;classpath&gt;</code> are also valid
for <code>&lt;path&gt;</code>. For example:</p>
<pre>
&lt;path id=&quot;base.path&quot;&gt;
&lt;pathelement path=&quot;${classpath}&quot;/&gt;
&lt;/path&gt;</pre>
can be written as:
<p>can be written as:</p>
<pre>&lt;path id=&quot;base.path&quot; path=&quot;${classpath}&quot;/&gt;</pre>
<h4 id="pathshortcut">Path Shortcut</h4>
<p>
<em>Since Ant 1.6</em>, there is a shortcut for converting paths to OS specific
strings in properties. One can use the expression
<samp>${toString:<em>pathreference</em>}</samp> to convert a path element
reference to a string that can be used for a path argument. For example:
</p>
<p><em>Since Ant 1.6</em>, there is a shortcut for converting paths to OS specific strings in properties. One can use
the expression <samp>${toString:<em>pathreference</em>}</samp> to convert a path element reference to a string that can
be used for a path argument. For example:</p>
<pre>
&lt;path id="lib.path.ref"&gt;
&lt;fileset dir="lib" includes="*.jar"/&gt;
@@ -361,9 +297,8 @@ can be written as:
&lt;/javac&gt;</pre>

<h3 id="arg">Command-line Arguments</h3>
<p>Several tasks take arguments that will be passed to another
process on the command line. To make it easier to specify arguments
that contain space characters, nested <code>arg</code> elements can be used.</p>
<p>Several tasks take arguments that will be passed to another process on the command line. To make it easier to specify
arguments that contain space characters, nested <code>arg</code> elements can be used.</p>
<table class="attr">
<tr>
<th>Attribute</th>
@@ -372,28 +307,23 @@ that contain space characters, nested <code>arg</code> elements can be used.</p>
</tr>
<tr>
<td>value</td>
<td>a single command-line argument; can contain space
characters.</td>
<td>a single command-line argument; can contain space characters.</td>
<td rowspan="5">Exactly one of these.</td>
</tr>
<tr>
<td>file</td>
<td class="left">The name of a file as a single command-line
argument; will be replaced with the absolute filename of the file.</td>
<td class="left">The name of a file as a single command-line argument; will be replaced with the absolute filename
of the file.</td>
</tr>
<tr>
<td>path</td>
<td class="left">A string that will be treated as a path-like
string as a single command-line argument; you can use <q>;</q>
or <q>:</q> as
path separators and Ant will convert it to the platform's local
conventions.</td>
<td class="left">A string that will be treated as a path-like string as a single command-line argument; you can
use <q>;</q> or <q>:</q> as path separators and Ant will convert it to the platform's local conventions.</td>
</tr>
<tr>
<td>pathref</td>
<td class="left"><a href="#references">Reference</a> to a path
defined elsewhere. Ant will convert it to the platform's local
conventions.</td>
<td class="left"><a href="#references">Reference</a> to a path defined elsewhere. Ant will convert it to the
platform's local conventions.</td>
</tr>
<tr>
<td>line</td>
@@ -401,44 +331,38 @@ that contain space characters, nested <code>arg</code> elements can be used.</p>
</tr>
<tr>
<td>prefix</td>
<td>A fixed string to be placed in front of the
argument. In the case of a line broken into parts, it will be
placed in front of every part. <em>Since Ant 1.8.</em></td>
<td>A fixed string to be placed in front of the argument. In the case of a line broken into parts, it will be placed
in front of every part. <em>Since Ant 1.8.</em></td>
<td>No</td>
</tr>
<tr>
<td>suffix</td>
<td>A fixed string to be placed immediately after the
argument. In the case of a line broken into parts, it will be
<td>A fixed string to be placed immediately after the argument. In the case of a line broken into parts, it will be
placed after every part. <em>Since Ant 1.8.</em></td>
<td>No</td>
</tr>
</table>

<p>It is highly recommended to avoid the <var>line</var> version
when possible. Ant will try to split the command line in a way
similar to what a (Unix) shell would do, but may create something that
is very different from what you expect under some circumstances.</p>
<p>It is highly recommended to avoid the <var>line</var> version when possible. Ant will try to split the command line
in a way similar to what a (Unix) shell would do, but may create something that is very different from what you expect
under some circumstances.</p>

<h4>Examples</h4>
<pre>&lt;arg value=&quot;-l -a&quot;/&gt;</pre>
<p>is a single command-line argument containing a space character,
<em>not</em> separate options <q>-l</q> and <q>-a</q>.</p>
<p>is a single command-line argument containing a space character, <em>not</em> separate options <q>-l</q>
and <q>-a</q>.</p>
<pre>&lt;arg line=&quot;-l -a&quot;/&gt;</pre>
<p>This is a command line with two separate options, <q>-l</q> and <q>-a</q>.</p>
<pre>&lt;arg path=&quot;/dir;/dir2:\dir3&quot;/&gt;</pre>
<p>is a single command-line argument with the value
<code>\dir;\dir2;\dir3</code> on DOS-based systems and
<code>/dir:/dir2:/dir3</code> on Unix(-like) systems.</p>
<p>is a single command-line argument with the value <code>\dir;\dir2;\dir3</code> on DOS-based systems
and <code>/dir:/dir2:/dir3</code> on Unix(-like) systems.</p>

<h3 id="references">References</h3>

<p>Any project element can be assigned an identifier using its
<var>id</var> attribute. In most cases the element can subsequently
be referenced by specifying the <var>refid</var> attribute on an
element of the same type. This can be useful if you are going to
replicate the same snippet of XML over and over again&mdash;using a
<code>&lt;classpath&gt;</code> structure more than once, for example.</p>
<p>Any project element can be assigned an identifier using its <var>id</var> attribute. In most cases the element can
subsequently be referenced by specifying the <var>refid</var> attribute on an element of the same type. This can be
useful if you are going to replicate the same snippet of XML over and over again&mdash;using
a <code>&lt;classpath&gt;</code> structure more than once, for example.</p>
<p>The following example:</p>
<pre>
&lt;project ... &gt;
@@ -483,70 +407,56 @@ replicate the same snippet of XML over and over again&mdash;using a
&lt;/javac&gt;
&lt;/target&gt;
&lt;/project&gt;</pre>
<p>All tasks that use nested elements for
<a href="Types/patternset.html">PatternSet</a>s,
<a href="Types/fileset.html">FileSet</a>s,
<a href="Types/zipfileset.html">ZipFileSet</a>s or
<a href="#path">path-like structures</a> accept references to these structures
as shown in the examples. Using <var>refid</var> on a task will ordinarily
have the same effect (referencing a task already declared), but the user
should be aware that the interpretation of this attribute is dependent on the
implementation of the element upon which it is specified. Some tasks (the
<a href="Tasks/property.html">property</a> task is a handy example)
<p>All tasks that use nested elements
for <a href="Types/patternset.html">PatternSet</a>s, <a href="Types/fileset.html">FileSet</a>s, <a href="Types/zipfileset.html">ZipFileSet</a>s
or <a href="#path">path-like structures</a> accept references to these structures as shown in the
examples. Using <var>refid</var> on a task will ordinarily have the same effect (referencing a task already declared),
but the user should be aware that the interpretation of this attribute is dependent on the implementation of the element
upon which it is specified. Some tasks (the <a href="Tasks/property.html">property</a> task is a handy example)
deliberately assign a different meaning to <var>refid</var>.</p>

<h3 id="external-tasks">Use of external tasks</h3>
Ant supports a plugin mechanism for using third party tasks. For using them you
have to do two steps:
<p>Ant supports a plugin mechanism for using third party tasks. For using them you have to do two steps:</p>
<ol>
<li>place their implementation somewhere where Ant can find them.</li>
<li>declare them.</li>
</ol>
Don't add anything to the <code>CLASSPATH</code> environment variable&mdash;this is often the
reason for very obscure errors. Use Ant's own <a href="install.html#optionalTasks">mechanisms</a>
for adding libraries:
<p>Don't add anything to the <code>CLASSPATH</code> environment variable&mdash;this is often the reason for very obscure
errors. Use Ant's own <a href="install.html#optionalTasks">mechanisms</a> for adding libraries:</p>
<ul>
<li>via command line argument <code>-lib</code></li>
<li>adding to <code>${user.home}/.ant/lib</code></li>
<li>adding to <code>${ant.home}/lib</code></li>
</ul>
For the declaration there are several ways:
<p>For the declaration there are several ways:</p>
<ul>
<li>declare a single task per using instruction using
<code>&lt;<a href="Tasks/taskdef.html">taskdef</a> name=&quot;taskname&quot;
classname=&quot;ImplementationClass&quot;/&gt;</code>
<br/>
<code>&lt;taskdef name=&quot;for&quot; classname=&quot;net.sf.antcontrib.logic.For&quot;/&gt;
&lt;for ... /&gt;</code>
<code>&lt;<a href="Tasks/taskdef.html">taskdef</a> name=&quot;taskname&quot;
classname=&quot;ImplementationClass&quot;/&gt;</code><br/>
<code>&lt;taskdef name=&quot;for&quot; classname=&quot;net.sf.antcontrib.logic.For&quot;/&gt; &lt;for
... /&gt;</code>
</li>
<li>declare a bundle of tasks using a <samp>properties</samp> file holding these
taskname-ImplementationClass-pairs and <code>&lt;taskdef&gt;</code>
<br/>
<code>&lt;taskdef resource=&quot;net/sf/antcontrib/antcontrib.properties&quot;/&gt;
&lt;for ... /&gt;</code>
<li>declare a bundle of tasks using a <samp>properties</samp> file holding these taskname&ndash;ImplementationClass
pairs and <code>&lt;taskdef&gt;</code><br/>
<code>&lt;taskdef resource=&quot;net/sf/antcontrib/antcontrib.properties&quot;/&gt; &lt;for ... /&gt;</code>
</li>
<li>declare a bundle of tasks using
an <a href="Types/antlib.html">xml file</a> holding these
taskname-ImplementationClass-pairs and <code>&lt;taskdef&gt;</code>
<br/>
<code>&lt;taskdef resource=&quot;net/sf/antcontrib/antlib.xml&quot;/&gt;
&lt;for ... /&gt;</code>
<li>declare a bundle of tasks using an <a href="Types/antlib.html">xml file</a> holding these
taskname-ImplementationClass-pairs and <code>&lt;taskdef&gt;</code><br/>
<code>&lt;taskdef resource=&quot;net/sf/antcontrib/antlib.xml&quot;/&gt; &lt;for ... /&gt;</code>
</li>
<li>declare a bundle of tasks using an xml file named <samp>antlib.xml</samp>, XML namespace and
<a href="Types/antlib.html#antlibnamespace"><code>antlib:</code> protocol handler</a>
<br/>
<code>&lt;project xmlns:ac=&quot;antlib:net.sf.antcontrib&quot;/&gt;
&lt;ac:for ... /&gt;</code>
<li>declare a bundle of tasks using an xml file named <samp>antlib.xml</samp>, XML namespace
and <a href="Types/antlib.html#antlibnamespace"><code>antlib:</code> protocol handler</a><br/>
<code>&lt;project xmlns:ac=&quot;antlib:net.sf.antcontrib&quot;/&gt; &lt;ac:for ... /&gt;</code>
</li>
</ul>

If you need a special function, you should
<ol>
<li>have a look at this manual, because Ant provides lot of tasks</li>
<li>have a look at the external task page <a href="https://ant.apache.org/external.html">online</a></li>
<li>have a look at the external task <a href="https://wiki.apache.org/ant/AntExternalTaskdefs">wiki
page</a></li>
<li>ask on the <a href="https://ant.apache.org/mail.html#User%20List">Ant user</a> list</li>
<li>have a look at the external task page <a href="https://ant.apache.org/external.html" target="_top">online</a></li>
<li>have a look at the external task <a href="https://wiki.apache.org/ant/AntExternalTaskdefs" target="_top">wiki
page</a></li>
<li>ask on the <a href="https://ant.apache.org/mail.html#User%20List" target="_top">Ant user</a> list</li>
<li><a href="tutorial-writing-tasks.html">implement</a> (and share) your own</li>
</ol>



Loading…
Cancel
Save