Browse Source

Merge differences between the ANT_15_FINAL branch and the trunk into the trunk.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273081 13f79535-47bb-0310-9956-ffa450edef68
master
Magesh Umasankar 23 years ago
parent
commit
da5a13f8e4
100 changed files with 2184 additions and 862 deletions
  1. +71
    -0
      LICENSE.dom
  2. +20
    -0
      LICENSE.sax
  3. +1
    -1
      README
  4. +326
    -4
      WHATSNEW
  5. +31
    -2
      build.xml
  6. +38
    -39
      docs/ant_task_guidelines.html
  7. +1
    -1
      docs/manual/CoreTasks/concat.html
  8. +11
    -4
      docs/manual/CoreTasks/conditions.html
  9. +1
    -16
      docs/manual/CoreTasks/jar.html
  10. +5
    -0
      docs/manual/CoreTasks/pathconvert.html
  11. +61
    -30
      docs/manual/CoreTasks/style.html
  12. +13
    -20
      docs/manual/Integration/VAJAntTool.html
  13. +18
    -9
      docs/manual/OptionalTasks/ejb.html
  14. +73
    -76
      docs/manual/OptionalTasks/jpcoverage.html
  15. +0
    -4
      docs/manual/OptionalTasks/jspc.html
  16. +2
    -2
      docs/manual/OptionalTasks/perforce.html
  17. +18
    -18
      docs/manual/OptionalTasks/pvcstask.html
  18. +4
    -4
      docs/manual/OptionalTasks/replaceregexp.html
  19. +8
    -2
      docs/manual/OptionalTasks/rpm.html
  20. +1
    -1
      docs/manual/OptionalTasks/script.html
  21. +2
    -2
      docs/manual/OptionalTasks/serverdeploy.html
  22. +5
    -5
      docs/manual/OptionalTasks/sos.html
  23. +23
    -14
      docs/manual/OptionalTasks/splash.html
  24. +24
    -24
      docs/manual/OptionalTasks/starteam.html
  25. +6
    -1
      docs/manual/OptionalTasks/stylebook.html
  26. +17
    -8
      docs/manual/OptionalTasks/vss.html
  27. +9
    -9
      docs/manual/OptionalTasks/xmlvalidate.html
  28. +3
    -0
      docs/manual/coretasklist.html
  29. +2
    -0
      docs/manual/dirtasks.html
  30. +20
    -5
      docs/manual/install.html
  31. +7
    -4
      docs/manual/optionaltasklist.html
  32. +67
    -0
      docs/manual/tasksoverview.html
  33. +1
    -1
      docs/manual/using.html
  34. +10
    -3
      lib/README
  35. BIN
      lib/xercesImpl.jar
  36. +17
    -0
      src/etc/testcases/core/include/included_file_parse_error/build.xml
  37. +4
    -0
      src/etc/testcases/core/include/included_file_parse_error/included_file.xml
  38. +17
    -0
      src/etc/testcases/core/include/included_file_task_error/build.xml
  39. +4
    -0
      src/etc/testcases/core/include/included_file_task_error/included_file.xml
  40. +19
    -0
      src/etc/testcases/core/include/including_file_parse_error/build.xml
  41. +3
    -0
      src/etc/testcases/core/include/including_file_parse_error/included_file.xml
  42. +18
    -0
      src/etc/testcases/core/include/including_file_task_error/build.xml
  43. +3
    -0
      src/etc/testcases/core/include/including_file_task_error/included_file.xml
  44. +8
    -0
      src/etc/testcases/taskdefs/optional/xml/test.xml
  45. +8
    -0
      src/etc/testcases/taskdefs/optional/xml/test.xsl
  46. +11
    -0
      src/etc/testcases/taskdefs/optional/xslt.xml
  47. +17
    -0
      src/etc/testcases/taskdefs/zip.xml
  48. +25
    -0
      src/etc/testcases/types/selectors.xml
  49. +307
    -0
      src/main/org/apache/tools/ant/Diagnostics.java
  50. +3
    -1
      src/main/org/apache/tools/ant/DirectoryScanner.java
  51. +7
    -2
      src/main/org/apache/tools/ant/Main.java
  52. +5
    -3
      src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java
  53. +6
    -3
      src/main/org/apache/tools/ant/taskdefs/Ant.java
  54. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/Basename.java
  55. +2
    -1
      src/main/org/apache/tools/ant/taskdefs/BuildNumber.java
  56. +1
    -3
      src/main/org/apache/tools/ant/taskdefs/CVSPass.java
  57. +0
    -1
      src/main/org/apache/tools/ant/taskdefs/CallTarget.java
  58. +7
    -10
      src/main/org/apache/tools/ant/taskdefs/Chmod.java
  59. +18
    -18
      src/main/org/apache/tools/ant/taskdefs/Copy.java
  60. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/DependSet.java
  61. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/Dirname.java
  62. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/Echo.java
  63. +12
    -13
      src/main/org/apache/tools/ant/taskdefs/ExecTask.java
  64. +4
    -0
      src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java
  65. +5
    -5
      src/main/org/apache/tools/ant/taskdefs/Exit.java
  66. +9
    -9
      src/main/org/apache/tools/ant/taskdefs/Filter.java
  67. +4
    -4
      src/main/org/apache/tools/ant/taskdefs/FixCRLF.java
  68. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/Get.java
  69. +13
    -20
      src/main/org/apache/tools/ant/taskdefs/JDBCTask.java
  70. +10
    -4
      src/main/org/apache/tools/ant/taskdefs/Jar.java
  71. +2
    -1
      src/main/org/apache/tools/ant/taskdefs/Java.java
  72. +17
    -18
      src/main/org/apache/tools/ant/taskdefs/Javac.java
  73. +0
    -1
      src/main/org/apache/tools/ant/taskdefs/Javadoc.java
  74. +12
    -128
      src/main/org/apache/tools/ant/taskdefs/Manifest.java
  75. +226
    -0
      src/main/org/apache/tools/ant/taskdefs/ManifestTask.java
  76. +29
    -10
      src/main/org/apache/tools/ant/taskdefs/MatchingTask.java
  77. +30
    -8
      src/main/org/apache/tools/ant/taskdefs/PathConvert.java
  78. +0
    -5
      src/main/org/apache/tools/ant/taskdefs/Property.java
  79. +1
    -2
      src/main/org/apache/tools/ant/taskdefs/Recorder.java
  80. +76
    -84
      src/main/org/apache/tools/ant/taskdefs/SQLExec.java
  81. +14
    -13
      src/main/org/apache/tools/ant/taskdefs/Sleep.java
  82. +2
    -1
      src/main/org/apache/tools/ant/taskdefs/Transform.java
  83. +3
    -3
      src/main/org/apache/tools/ant/taskdefs/Tstamp.java
  84. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/UpToDate.java
  85. +11
    -11
      src/main/org/apache/tools/ant/taskdefs/War.java
  86. +0
    -9
      src/main/org/apache/tools/ant/taskdefs/XSLTLiaison.java
  87. +84
    -40
      src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
  88. +2
    -1
      src/main/org/apache/tools/ant/taskdefs/XmlProperty.java
  89. +40
    -39
      src/main/org/apache/tools/ant/taskdefs/Zip.java
  90. +3
    -3
      src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java
  91. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java
  92. +4
    -1
      src/main/org/apache/tools/ant/taskdefs/defaults.properties
  93. +29
    -20
      src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java
  94. +2
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java
  95. +19
    -26
      src/main/org/apache/tools/ant/taskdefs/optional/IContract.java
  96. +36
    -9
      src/main/org/apache/tools/ant/taskdefs/optional/Javah.java
  97. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java
  98. +4
    -4
      src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java
  99. +55
    -7
      src/main/org/apache/tools/ant/taskdefs/optional/PropertyFile.java
  100. +7
    -2
      src/main/org/apache/tools/ant/taskdefs/optional/RenameExtensions.java

+ 71
- 0
LICENSE.dom View File

@@ -0,0 +1,71 @@
This license came from:
http://www.w3.org/Consortium/Legal/copyright-software-19980720


W3C® SOFTWARE NOTICE AND LICENSE
Copyright © 1994-2001 World
Wide Web Consortium, <a href="http://www.w3.org/">World
Wide Web Consortium</a>, (<a href=
"http://www.lcs.mit.edu/">Massachusetts Institute of
Technology</a>, <a href="http://www.inria.fr/">Institut National de
Recherche en Informatique et en Automatique</a>, <a href=
"http://www.keio.ac.jp/">Keio University</a>). All Rights Reserved.
http://www.w3.org/Consortium/Legal/

This W3C work (including software, documents, or other related
items) is being provided by the copyright holders under the
following license. By obtaining, using and/or copying this work,
you (the licensee) agree that you have read, understood, and will
comply with the following terms and conditions:
Permission to use, copy, modify, and distribute this software
and its documentation, with or without modification,  for any
purpose and without fee or royalty is hereby granted, provided that
you include the following on ALL copies of the software and
documentation or portions thereof, including modifications, that
you make:

The full text of this NOTICE in a location viewable to users of
the redistributed or derivative work.

Any pre-existing intellectual property disclaimers, notices, or
terms and conditions. If none exist, a short notice of the
following form (hypertext is preferred, text is permitted) should
be used within the body of any redistributed or derivative code:
"Copyright © [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of
Technology, Institut National de
Recherche en Informatique et en Automatique, Keio University). All Rights Reserved.
http://www.w3.org/Consortium/Legal/"

Notice of any changes or modifications to the W3C files,
including the date changes were made. (We recommend you provide
URIs to the location from which the code is derived.)

THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND
COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE
USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD
PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT,
SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE
SOFTWARE OR DOCUMENTATION.

The name and trademarks of copyright holders may NOT be used in
advertising or publicity pertaining to the software without
specific, written prior permission. Title to copyright in this
software and any associated documentation will at all times remain
with copyright holders.
____________________________________
This formulation of W3C's notice and license became active on
August 14 1998 so as to improve compatibility with GPL. This
version ensures that W3C software licensing terms are no more
restrictive than GPL and consequently W3C software may be
distributed in GPL packages. See the older formulation for the
policy prior to this date. Please see our Copyright FAQ for common
questions about using materials from
our site, including specific terms and conditions for packages like
libwww, Amaya, and Jigsaw.
Other questions about this notice can be
directed to site-policy@w3.org.

webmaster

+ 20
- 0
LICENSE.sax View File

@@ -0,0 +1,20 @@
This license came from: http://www.megginson.com/SAX/copying.html
However please note future versions of SAX may be covered
under http://saxproject.org/?selected=pd


This page is now out of date -- see the new SAX site at
http://www.saxproject.org/ for more up-to-date
releases and other information. Please change your bookmarks.


SAX2 is Free!

I hereby abandon any property rights to SAX 2.0 (the Simple API for
XML), and release all of the SAX 2.0 source code, compiled code, and
documentation contained in this distribution into the Public Domain.
SAX comes with NO WARRANTY or guarantee of fitness for any
purpose.

David Megginson, david@megginson.com
2000-05-05

+ 1
- 1
README View File

@@ -54,7 +54,7 @@

Documentation is available in HTML format, in the docs/ directory.
For information about building and installing Ant, see
docs/manual/index.html
docs/manual/index.html


Licensing


+ 326
- 4
WHATSNEW View File

@@ -13,8 +13,297 @@ properties files and output them instead of Ant's properties.

* <input> has a new attribute that allows you to specify a default value.

Changes from Ant 1.4.1 to Ant 1.5
=================================
Changes from Ant 1.5beta3 to Ant 1.5
====================================

Changes that could break older environments:
--------------------------------------------

* The filesetmanifest attribute added to <jar> after the 1.4.1
release has been removed for now. This change may affect only
the 1.5Beta/1.6Alpha users. An attempt will be made to add this
feature back into Ant 1.6.

Fixed bugs:
-----------

* <zip> and friends would always update existing archive if you set
the update attribute to true.

* To support backward compatibility with older versions, <pathconvert>
will once again set the property, even if the result is the empty
string, unless the new 'setonempty' attribute is set to false|no|off
(default is "true").

* The manifest task would crash XmlLogger

Other changes:
--------------

* added **/.svn and **/.svn/** to the default excludes

Changes from Ant 1.5beta2 to Ant 1.5beta3
=========================================

Changes that could break older environments:
--------------------------------------------

* Project.getBuildListeners now returns a clone of the listener
list. Changes to the returned list will not affect the listeners
currently attached to the Project. It also means that it is safe to
iterate over the returned list if listeners are added or removed
during the traversal.

* <pvcs> default filenameformat has been different from Ant 1.4.1.
Now it is different from 1.5beta1 and 1.5beta2.

* Some messages that are printed during startup will not be
written to the logfile specified via -logfile as they might destroy
the format of the file for special BuildLoggers (like XmlLogger).

* <pathconvert> won't set the property if the result is the empty string.

Fixed bugs:
-----------

* <available> could fail to find files or directories that happen to
start with the name of the project's basedir but are not children of
the basedir.

* Nested <property>'s inside <ant> can now be overriden by subsequent
<ant> and <antcall> tasks.

* <xslt>'s outputtype attribute wouldn't do anything.

* <linecontains> filterreader could swallow lines.

* <sequential> used to configure the tasks (set their attributes)
before the first task has been executed. This means that properties
that have been set by nested task seemed to be unset for the other
tasks in the same <sequential> element.

* <javac>'s sourcepath setting has been ignored by some compiler
implementations.

* <javadoc>'s packagelist attribute didn't work.

* the plain mailer would always use port 25 in <mail>.

* Ant's default logger could swallow empty lines.

* ejbjar's iPlanet nested element now can process multiple descriptors.

* IPlanetEjbc was looking in the wrong place for four iiop files.

* <javac> would pass the -source switch to JDK 1.3's javac, even
though it doesn't support it.

Other changes:
--------------

* <checksum> now uses a buffer (of configurable size).

* The "Trying to override task definition" warning has been degraded
to verbose level if the two task definitions only differ in the class
loader instance that has loaded the definition.

* Add a jvmargs to the ejbjar's weblogic element to allow additional
arguments to be provided to the VM runnign ejbc. Document the
jvmdebuglevel attribute which can be used to avoid warnings about
interface classess being found on the classpath. Document the new
<sysproperty> element which allows JVM properties to be defined.
Added an outputdir attribute to allow the destination to be a
directory into which the exploded jar is written.

* ejbjar now supports Borland Enterprise Server 5 and Jonas 2.5

Changes from Ant 1.5beta1 to Ant 1.5beta2
=========================================

Changes that could break older environments:
--------------------------------------------

* Properties will now be expanded in mail message bodies. This means
that one $ sign will be stripped if your mail message contains the text
$$.

* org.apache.tools.ant.taskdefs.Expand no longer extends MatchingTask.

* Available#setFile now again uses a File argument as it did in 1.4,
this may break environments that have been adapted to the String
argument version present in 1.5beta1.

Fixed bugs:
-----------
* When <move> attempts a rename, it deletes the destination file, if it
exists, before renaming the source file. However, <move> was not
checking if the destination file was actually a directory before
trying to delete it.

* Make CVS Tasks to work under Cygwin.

* Fix LineContains to handle huge files elegantly without causing
Stack Overflows.

* if you ask for the "classic" compiler on Java1.4, you get upgraded to
"modern" because there is no classic compiler any more.

* the <http> condition was viewing 404 'not found' exceptions as success. Now
it defaults to viewing any response >=400 as an error, and has an errorsBeginAt
attribute you can use if you want a higher or lower value.

* <get> throws a build exception on an http authorization error, unless you
have set ignoreerrors to true.

* <wsdltodotnet> was spelt in Wintel case: <WsdlToDotnet>. It is now lower
case, though the old spelling is retained for anyone who used it.

* Merging of Manifests in jar now works as documented.

* paths that have been separated by colons would be incorrectly parsed
on NetWare.

* runant.pl now supports NetWare.

* <tempfile> and <setproxy> tasks were in beta1, but not defined by
default; They now are. <tempfile> fills a property with the name of a
temporary file; <setproxy> lets you set the JVM's http, ftp and socks proxy
settings.

* <available classname="foo" ignoresystemclasses="true"> failed for
JDK 1.1 and 1.2, even if the class could be found on the
user-specified classpath.

* <property environment=... /> now works on z/OS.

* forked <javac> failed for the wrong reason on JDK 1.1 - Ant would
use a temporary file to hold the names of the files to compile under
some conditons, but 1.1 doesn't support this feature. Ant will no
longer try this, but you may run into problems with the length of the
command line now.

* the refid attribute for <property>s nested into <ant> or <param>s
nested into <antcall> didn't work.

* <replaceregexp> didn't work for nested <fileset>s.

* <javadoc> dropped sourcepath entries if no "interesting" .java
source files could be found below them. This has been backwards
incompatible and caused problems with custom doclets like xdoclet.

* Using the doclet, docletpath or docletpathref attributes of
<javadoc> may have caused NullPointerExceptions.

* nested <filesets> of <javadoc> would include too much.

* <dependset> will no longer choke on <targetfileset>s that point to
non-existing directories.

* <patch> didn't work at all.

* <replace> and <replaceregexp> now fail if the file they are working
on is locked.

* <javadoc> would pick up the wrong executable in the combination JDK
1.2 and AIX.

Other changes:
--------------

* z/OS now gets detected by the os condition.

* <fileset> and <dirset> now have an optional followsymlink attribute
that can prevent Ant from following symbolic links on some platforms.

* BeanShell is now supported in the <script> task.

* <ejbjar> under Weblogic attempts to use the ejbc20 compiler for 2.0 beans
based on the deployment descriptor's DTD reference. Under weblogic 7.00 Beta
this ejbc class has been deprecated. To avoid the deprecation warning use
ejbcclass="weblogic.ejbc".

* <ejbjar> will add a manifest to the generated jar based on the naming
convention in use. This overrides the manifest specified in the
<ejbjar> attribute


Changes from Ant 1.4.1 to 1.5beta1
==================================

Changes that could break older environments:
--------------------------------------------

* Important: Single $ signs are no longer silently stripped!
=======
* Project.getBuildListeners now returns a clone of the listener
list. Changes to the returned list will not affect the listeners
currently attached to the Project. It also means that it is safe to
iterate over the returned list if listeners are added or removed
during the traversal.

* <pvcs> default filenameformat has been different from Ant 1.4.1.
Now it is different from 1.5beta1 and 1.5beta2.

* Some messages that are printed during startup will not be
written to the logfile specified via -logfile as they might destroy
the format of the file for special BuildLoggers (like XmlLogger).

Fixed bugs:
-----------

* <available> could fail to find files or directories that happen to
start with the name of the project's basedir but are not children of
the basedir.

* Nested <property>'s inside <ant> can now be overriden by subsequent
<ant> and <antcall> tasks.

* <xslt>'s outputtype attribute wouldn't do anything.

* <linecontains> filterreader could swallow lines.

* <sequential> used to configure the tasks (set their attributes)
before the first task has been executed. This means that properties
that have been set by nested task seemed to be unset for the other
tasks in the same <sequential> element.

* <javac>'s sourcepath setting has been ignored by some compiler
implementations.

* <javadoc>'s packagelist attribute didn't work.

* the plain mailer would always use port 25 in <mail>.

* Ant's default logger could swallow empty lines.

* ejbjar's iPlanet nested element now can process multiple descriptors.

* IPlanetEjbc was looking in the wrong place for four iiop files.

* <javac> would pass the -source switch to JDK 1.3's javac, even
though it doesn't support it.

Other changes:
--------------

* <checksum> now uses a buffer (of configurable size).

* The "Trying to override task definition" warning has been degraded
to verbose level if the two task definitions only differ in the class
loader instance that has loaded the definition.

* Add a jvmargs to the ejbjar's weblogic element to allow additional
arguments to be provided to the VM runnign ejbc. Document the
jvmdebuglevel attribute which can be used to avoid warnings about
interface classess being found on the classpath. Document the new
<sysproperty> element which allows JVM properties to be defined.
Added an outputdir attribute to allow the destination to be a
directory into which the exploded jar is written.

* ejbjar now supports Borland Enterprise Server 5 and Jonas 2.5

Changes from Ant 1.5beta1 to Ant 1.5beta2
=========================================

Changes that could break older environments:
--------------------------------------------
@@ -129,8 +418,38 @@ Changes from Ant 1.4.1 to 1.5beta1
Changes that could break older environments:
--------------------------------------------

<<<<<<< WHATSNEW
* Important: Single $ signs are no longer silently stripped!
=======
* The filesetmanifest attribute added to <jar> after the 1.4.1
release has been removed for now. This change may affect only
the 1.5Beta/1.6Alpha users. An attempt will be made to add this
feature back into Ant 1.6.

Fixed bugs:
-----------

* <zip> and friends would always update existing archive if you set
the update attribute to true.

* To support backward compatibility with older versions, <pathconvert>
will once again set the property, even if the result is the empty
string, unless the new 'setonempty' attribute is set to false|no|off
(default is "true").

* The manifest task would crash XmlLogger

Other changes:
--------------

* added **/.svn and **/.svn/** to the default excludes

Changes from Ant 1.5beta2 to Ant 1.5beta3
=========================================

Changes that could break older environments:
--------------------------------------------

* Project.getBuildListeners now returns a clone of the listener
list. Changes to the returned list will not affect the listeners
currently attached to the Project. It also means that it is safe to
@@ -144,6 +463,8 @@ Changes that could break older environments:
written to the logfile specified via -logfile as they might destroy
the format of the file for special BuildLoggers (like XmlLogger).

* <pathconvert> won't set the property if the result is the empty string.

Fixed bugs:
-----------

@@ -431,7 +752,7 @@ Other changes:

* <ejbjar> now allows control over which additional classes and interfaces
are added to the generated EJB jars. A new attribute "dependency" can be
defines which classes are added. The addition of classes now uses
defined which controls what classes are added. The addition of classes now uses
the Jakarta-BCEL library rather than reflection, meaning bean classes are
no longer loaded into Ant's JVM. The default dependency analyzer is known as
the ancestor analyzer. It provides the same behaviour as the 1.4.1 version of
@@ -465,7 +786,8 @@ Other changes:

* New tasks <replaceregexp>, <checksum>, <translate>, <waitfor>,
<manifest>, <vsscp>, <vssadd>, <vsscreate>, <splash>, <basename>, <dirname>,
<concat>.
<concat>, <sourceoffsite>, <jarlib-available>, <jarlib-display>,
<jarlib-manifest>, <jarlib-resolve>.

* A new combined <mail> task, which replaces the old <mail> and
<mimemail> tasks, has been added. The <mimemail> task, and


+ 31
- 2
build.xml View File

@@ -27,6 +27,7 @@
<property name="chmod.fail" value="true" />
<property name="deprecation" value="false" />
<property name="optimize" value="true" />
<property name="javac.target" value="1.1" />
<property name="junit.fork" value="false" />
<property name="junit.filtertrace" value="off"/>
<property name="junit.summary" value="no"/>
@@ -135,6 +136,10 @@
unless="jdk1.2+" />
<exclude name="${optional.package}/ejb/IPlanet*.java"
unless="jdk1.2+" />
<exclude name="${optional.package}/ejb/Borland*.java"
unless="jdk1.2+" />
<exclude name="${optional.package}/j2ee/*.java"
unless="jdk1.2+" />
<!-- uses the context classloader -->
<exclude name="${optional.package}/junit/JUnitClassLoaderTest.java"
unless="jdk1.2+" />
@@ -307,6 +312,20 @@
<exclude name="${ant.package}/types/XMLCatalogTest.java"/>
</patternset>
<!--
===================================================================
Set up a patternsets that matches the parts of our JUnit testsuite
that may be useful for task developers.
===================================================================
-->
<patternset id="useful.tests">
<include name="${ant.package}/BuildFileTest*" />
<include name="${regexp.package}/RegexpMatcherTest*" />
<include name="${regexp.package}/RegexpTest*" />
<include name="${optional.package}/AbstractXSLTLiaisonTest*" />
<include name="${ant.package}/types/AbstractFileSetTest*" />
</patternset>
<!--
===================================================================
Set up a patternsets that matches the parts of our JUnit testsuite
@@ -559,6 +578,7 @@
destdir="${build.classes}"
debug="${debug}"
deprecation="${deprecation}"
target="${javac.target}"
optimize="${optimize}" >
<classpath refid="classpath" />

@@ -635,6 +655,8 @@
<fileset dir=".">
<include name="LICENSE" />
<include name="LICENSE.xerces" />
<include name="LICENSE.dom" />
<include name="LICENSE.sax" />
</fileset>
<mapper type="glob" from="*" to="*.txt" />
</copy>
@@ -656,7 +678,7 @@
<metainf dir="${build.dir}" includes="LICENSE.txt"/>

<manifest>
<section name="${ant.package}">
<section name="${ant.package}/">
<attribute name="Extension-name"
value="org.apache.tools.ant" />
<attribute name="Specification-Title"
@@ -696,7 +718,7 @@
<metainf dir="${build.dir}" includes="LICENSE.txt"/>

<manifest>
<section name="${optional.package}">
<section name="${optional.package}/">
<attribute name="Extension-name"
value="org.apache.tools.ant.taskdefs.optional" />
<attribute name="Specification-Title"
@@ -817,9 +839,12 @@
<include name="README"/>
<include name="LICENSE"/>
<include name="LICENSE.xerces"/>
<include name="LICENSE.dom"/>
<include name="LICENSE.sax"/>
<include name="TODO"/>
<include name="WHATSNEW"/>
<include name="KEYS"/>
<include name="welcome.html"/>
</fileset>
</copy>

@@ -901,6 +926,8 @@
<include name="README"/>
<include name="LICENSE"/>
<include name="LICENSE.xerces"/>
<include name="LICENSE.dom"/>
<include name="LICENSE.sax"/>
<include name="TODO"/>
<include name="WHATSNEW"/>
<include name="KEYS"/>
@@ -909,6 +936,7 @@
<include name="bootstrap.bat"/>
<include name="bootstrap.sh"/>
<include name="build.xml"/>
<include name="welcome.html"/>
</fileset>
</copy>

@@ -1147,6 +1175,7 @@
<javac srcdir="${tests.dir}"
destdir="${build.tests}"
debug="${debug}"
target="${javac.target}"
deprecation="${deprecation}" >
<classpath refid="tests-classpath" />



+ 38
- 39
docs/ant_task_guidelines.html View File

@@ -35,13 +35,13 @@ development, maintenance and code size reasons.

Execute will spawn off separate programs under all the platforms which
ant supports, dealing with Java version issues as well as platform
issues. Always use this task to invoke other programs.
issues. Always use this task to invoke other programs.

<h4>Java, ExecuteJava</h4>

These classes can be used to spawn Java programs in a separate VM (they
use execute) or in the same VM -with or without a different classloader.
When deriving tasks from this, it often benefits users to permit the
use execute) or in the same VM -with or without a different classloader.
When deriving tasks from this, it often benefits users to permit the
classpath to be specified, and for forking to be an optional attribute.


@@ -84,17 +84,16 @@ editors and platforms. Some IDEs (JEdit) can highlight tabs, to stop you
accidentally inserting them

<h2>Attributes and elements</h2>

Use the Ant introspection based mapping of attributes into Java datatypes,
rather than implementing all your attributes as setFoo(String) and doing
the mapping to Int, bool or file yourself. This saves work on your part,
lets Java callers use you in a typesafe manner, and will let the Xdocs
documentation generator work out what the parameters are.
lets Java callers use you in a typesafe manner, and will let the Xdocs
documentation generator work out what the parameters are.
<p>
The ant1.x tasks are very inconsistent regarding naming of attributes
-some tasks use <tt>source<tt>, others <tt>src</tt>tt>.
Here is a list of preferred attribute names.
-some tasks use <tt>source</tt>, others <tt>src</tt>.
Here is a list of preferred attribute names.

<table>
<tr>
@@ -102,7 +101,7 @@ Here is a list of preferred attribute names.
failonerror
</td>
<td>
boolean to control whether failure to execute should throw a
boolean to control whether failure to execute should throw a
<tt>BuildException</tt> or just print an error.
Parameter validation failures should always throw an error, regardless
of this flag
@@ -156,32 +155,32 @@ to their ant system configuration.
Keep member variables private. If read access by subclasses is required.
add accessor methods rather than change the accessiblity of the member.
This enables subclasses to access the contents, yet
still be decoupled from the actual implementation.
still be decoupled from the actual implementation.
<p>

The other common re-use mechanism in ant is for one task to create and
configure another. This is fairly simple.
configure another. This is fairly simple.

<h2>Do your own Dependency Checking</h2>

Make has the edge over Ant in its integrated dependency checking: the
command line apps make invokes dont need to do their own work. Ant tasks
do have to do their own dependency work, but if this can be done then
do have to do their own dependency work, but if this can be done then
it can be done well. A good dependency aware task can work out the dependencies
without explicit dependency information in the build file, and be smart
without explicit dependency information in the build file, and be smart
enough to work out the real dependencies, perhaps through a bit of file parsing.
The <tt>depends</tt> task is the best example of this. Some of the zip/jar
tasks are pretty good too, as they can update the archive when needed.
Most tasks just compare source and destination timestamps and work from there.
Most tasks just compare source and destination timestamps and work from there.
Tasks which don't do any dependency checking do not help users as much as
they can, because their needless work can trickle through the entire build, test
and deploy process.
and deploy process.

<h2>Support Java 1.1 through Java 1.4</h2>

Ant is designed to support Java1.1: to build on it, to run on it. Sometimes
functionality of tasks have to degrade in that environment -&lt;touch&gt;
is a case in point- this is usually due to library limitations;
is a case in point- this is usually due to library limitations;
such behaviour change must always be noted in the documentation.
<p>
What is problematic is code which is dependent on Java1.2 features
@@ -189,20 +188,20 @@ What is problematic is code which is dependent on Java1.2 features
These can not be used directly by any code and still be able to compile
and run on a Java 1.1 system. So please stick to the older collection
classes, and the older IO classes. If a new method in an existing class
is to be used, it must be used via reflection and the
<tt>NoSuchMethodException</tt> handled somehow.
is to be used, it must be used via reflection and the
<tt>NoSuchMethodException</tt> handled somehow.
<p>
What if code simply does not work on Java1.1? It can happen. It will
probably be OK to have the task as an optional task, with compilation
restricted to Java1.2 or later through build.xml modifications.
What if code simply does not work on Java1.1? It can happen. It will
probably be OK to have the task as an optional task, with compilation
restricted to Java1.2 or later through build.xml modifications.
Better still, use reflection to link to the classes at run time.
<p>
Java 1.4 adds a new optional change to the language itself, the
Java 1.4 adds a new optional change to the language itself, the
<tt>assert</tt> keyword, which is only enabled if the compiler is told
to compile 1.4 version source. Clearly with the 1.1 compatibility requirement,
Ant tasks can not use this keyword. They also need to move away from
using the JUnit <tt>assert()</tt> method and call <tt>assertTrue()</tt>
instead.
instead.



@@ -233,7 +232,7 @@ your task -feel free to do so!
<p>

A well written set of test cases will break the Ant task while it is in
development, until the code is actually complete. And every bug which
development, until the code is actually complete. And every bug which
surfaces later should have a test case added to demonstrate the problem,
and to fix it.

@@ -253,7 +252,7 @@ and patches do what they say. If you've got test cases it increases your
credibility significantly. To be precise, we hate submissions without
test cases, as it means we have to write them ourselves. This is
something that only gets done if we need the task or it is perceived as
utterly essential to many users.
utterly essential to many users.

<p>

@@ -323,7 +322,7 @@ Tasks calling such code can use the 'exec' or 'java' tasks to run the
programs, as you are just executing them at this point, not linking to
them.
<p>
Even if we cannot include your task into the Apache codebase, we can
Even if we cannot include your task into the Apache codebase, we can
still point to where you host it -just submit a diff to
xdocs/external.html pointing to your task.

@@ -337,14 +336,14 @@ was already implemented in a small corner of another task, or it has
been submitted by someone else and not committed. You can avoid this
by being aware of what is in the latest CVS tree -keep getting the daily
source updates, look at manual changes and subscribe to the ant-dev
mailing list.
mailing list.

<p>

If you are thinking of writing a task, posting a note on your thoughts
to the list can be informative -you well get other peoples insight and
maybe some half written task to do the basics, all without writing a
line of code.
line of code.


<h2>Submitting to Ant</h2>
@@ -357,7 +356,7 @@ It helps to be on this list, as you will see other submissions, and
any debate about your own submission.
<p>

Patches to existing files should be generated with
Patches to existing files should be generated with
<code>cvs diff -u filename</code>
and save the output to a file. If you want to get
the changes made to multiple files in a directory , just use <code>cvs
@@ -376,22 +375,22 @@ made.
New submissions should be proceeded with [SUBMIT]. The mailer-daemon
will reject any messages over 100KB, so any large update should be
zipped up. If your submission is bigger than that, why not break it up
into separate tasks.
into separate tasks.
<p>

We also like submissions to be added to
We also like submissions to be added to
<a href="http://nagoya.apache.org/bugzilla/">bugzilla</a>, so that they
dont get lost. Please submit them by first filing the report with a
meaningful name, then adding files as attachments. Use CVS diff files
please!
<p>

If you hear nothing after a couple of weeks, remind the mailing list.
If you hear nothing after a couple of weeks, remind the mailing list.
Sometimes really good submissions get lost in the noise of other issues.
This is particularly the case just prior to a new point release of
This is particularly the case just prior to a new point release of
the product. At that time anything other than bug fixes will tend
to be neglected.
<h2>Checklists</h2>

These are the things you should verify before submitting patches and new
@@ -401,14 +400,14 @@ can be addressed in the process. But by the time the code is committed,
everything including the documentation and some test cases will have
been done, so by getting them out the way up front can save time.
The committers look more favourably on patches and submissions with test
cases, while documentation helps sell the reason for a task.
cases, while documentation helps sell the reason for a task.

<h3>Checklist before submitting a patch</h3>
<ul>
<li>Added code complies with style guidelines
<li>Code compiles and runs on Java1.1
<li>New member variables are private, and provide public accessor methods
if access is actually needed.
if access is actually needed.
<li>Existing test cases succeed.
<li>New test cases written and succeed.
<li>Documentation page extended as appropriate.
@@ -417,7 +416,7 @@ cases, while documentation helps sell the reason for a task.
<li>Message to ant-dev contains [PATCH], task name and patch reason in
subject.
<li>Message body contains a rationale for the patch.
<li>Message attachment contains the patch file(s).
<li>Message attachment contains the patch file(s).
</ul>

<h3>Checklist before submitting a new task</h3>
@@ -427,7 +426,7 @@ subject.
<li>Source code complies with style guidelines
<li>Code compiles and runs on Java1.1
<li>Member variables are private, and provide public accessor methods
if access is actually needed.
if access is actually needed.
<li><i>Maybe</i> Task has failonerror attribute to control failure behaviour
<li>New test cases written and succeed
<li>Documentation page written


+ 1
- 1
docs/manual/CoreTasks/concat.html View File

@@ -51,7 +51,7 @@
<td valign="top">append</td>
<td valign="top">
Specifies whether or not the file specified by 'destfile'
should be overwritten. Defaults to &quot;yes&quot;.
should be overwritten. Defaults to &quot;no&quot;.
</td>
<td valign="top" align="center">No</td>
</tr>


+ 11
- 4
docs/manual/CoreTasks/conditions.html View File

@@ -170,6 +170,13 @@ of 400 or greater are viewed as invalid.</p>
are detected</td>
<td align="center">No</td>
</tr>
<tr>
<td valign="top">errorsBeginAt</td>
<td valign="top">The lowest HTTP response code that signals an error;
by default '400'; server errors, not-authorized, not-found and the like
are detected</td>
<td align="center">No</td>
</tr>
</table>

<h4>socket</h4>
@@ -263,8 +270,8 @@ that is "true","yes", or "on"</p>
<pre>
&lt;istrue value=&quot;${someproperty}&quot; /&gt;
&lt;istrue value=&quot;false&quot; /&gt;
</pre>
</pre>
<h4>isfalse</h4>
<p>Tests whether a string is not true, the negation of &lt;istrue&gt;
</p>
@@ -283,8 +290,8 @@ that is "true","yes", or "on"</p>
<pre>
&lt;isfalse value=&quot;${someproperty}&quot; /&gt;
&lt;isfalse value=&quot;false&quot; /&gt;
</pre>
</pre>
<hr>
<p align="center">Copyright &copy; 2001-2002 Apache Software
Foundation. All rights Reserved.</p>


+ 1
- 16
docs/manual/CoreTasks/jar.html View File

@@ -31,9 +31,7 @@ multiple ones to merge together different trees of files into one JAR.
The extended fileset and groupfileset attributes from the zip task are
also available in the jar task.
See the <a href="zip.html">Zip</a> task for more details and examples.</p>
<p>If the manifest is omitted, a simple one will be supplied by Ant.
If there is a manifest or manifests in your set of files, these manifests can
be used if <i>filesetmanifests</i> is set to <i>merge</i> or <i>mergewithoutmain</i>.</p>
<p>If the manifest is omitted, a simple one will be supplied by Ant.</p>
<p>The <code>update</code> parameter controls what happens if the
JAR file already exists. When set to <code>yes</code>, the JAR file is
updated with the files specified. When set to <code>no</code> (the
@@ -121,19 +119,6 @@ being wrapped and continued on the next line.
<td valign="top">the manifest file to use. This can be either the location of a manifest, or the name of a jar added through a fileset. If its the name of an added jar, the task expects the manifest to be in the jar at META-INF/MANIFEST.MF</td>
<td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">filesetmanifest</td>
<td valign="top">behavior when a Manifest is found in a zipfileset or
zipgroupfileset file is found. Valid values are &quot;skip&quot;,
&quot;merge&quot;, and &quot;mergewithoutmain&quot;. &quot;merge&quot;
will merge all of manifests together, and merge this into any other
specified manifests. &quot;mergewithoutmain&quot; merges everything
but the Main section of the manifests. Default value is &quot;skip&quot;.
<b>Note:</b> if this attribute's value is not &quot;skip&quot;, the
created jar will not be readable by using java.util.jar.JarInputStream
</td>
<td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">update</td>
<td valign="top">indicates whether to update or overwrite


+ 5
- 0
docs/manual/CoreTasks/pathconvert.html View File

@@ -72,6 +72,11 @@ drive letters to Unix paths, and vice-versa.</p>
<td valign="top" align="center">No; if omitted, a nested
<code>&lt;path&gt;</code> element must be supplied.</td>
</tr>
<td valign="top">setonempty</td>
<td valign="top">Should the property be set, even if the result
is the empty string?
<td valign="top" align="center">No; default is &quot;true&quot;.
</tr>
</table>
<h3>Parameters specified as nested elements</h3>
<h4>map</h4>


+ 61
- 30
docs/manual/CoreTasks/style.html View File

@@ -23,13 +23,13 @@ finally with the <i>defaultexcludes</i> attribute, you can specify whether you
want to use default exclusions or not. 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="../CoreTypes/fileset.html">FileSet</a> and supports all
attributes of <code>&lt;fileset&gt;</code> (<code>dir</code> becomes <code>basedir</code>)
as well as the nested <code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code>
<p>This task forms an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and supports all
attributes of <code>&lt;fileset&gt;</code> (<code>dir</code> becomes <code>basedir</code>)
as well as the nested <code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code>
and <code>&lt;patternset&gt;</code> elements.</p>
<p>This task supports the use of a nested &lt;param&gt; element which is used to pass values
<p>This task supports the use of a nested &lt;param&gt; element which is used to pass values
to an &lt;xsl:param&gt; declaration.</p>
<p>This task supports the use of a nested <a href="../CoreTypes/xmlcatalog.html">xmlcatalog</a>
<p>This task supports the use of a nested <a href="../CoreTypes/xmlcatalog.html">xmlcatalog</a>
element which is used to perform Entity and URI resolution</p>
<p><i>&lt;style&gt; and &lt;xslt&gt; refer to the same Ant task and can be used interchangeably.</i></p>
<p>If you want to use Xalan-J 1 or XSL:P, you also need Ant's optional.jar</p>
@@ -54,7 +54,7 @@ element which is used to perform Entity and URI resolution</p>
</tr>
<tr>
<td valign="top">extension</td>
<td valign="top">desired file extension to be used for the targets. If not
<td valign="top">desired file extension to be used for the targets. If not
specified, the default is &quot;.html&quot;.</td>
<td align="center" valign="top">No</td>
</tr>
@@ -68,7 +68,7 @@ element which is used to perform Entity and URI resolution</p>
<td align="center" valign="top">Yes</td>
</tr>
<tr>
<td valign="top">classpath</td>
<td valign="top">classpath</td>
<td valign="top">the classpath to use when looking up the XSLT
processor.</td>
<td align="center" valign="top">No</td>
@@ -89,39 +89,40 @@ element which is used to perform Entity and URI resolution</p>
<td valign="top">processor</td>

<td valign="top">name of the XSLT processor to use. Permissible values are
&quot;trax&quot; for a TraX compliant processor,
&quot;trax&quot; for a TraX compliant processor (ie JAXP interface
implementation such as Xalan 2 or Saxon),
&quot;xslp&quot; for the XSL:P processor, &quot;xalan&quot; for
the Apache XML Xalan (version 1) processor the name of an
arbitrary XSLTLiaison class. Defaults to trax, followed by xalan
and then xslp (in that order). The first one found in your class
path is the one that is used.

<em><strong>DEPRECATED</strong> - XSL:P is deprecated and will
be removed in the next version. Use trax or xalan instead.</em>.
<em><strong>DEPRECATED</strong> - XSL:P and xalan are deprecated and no
more supported.</em>.
</td>
<td align="center" valign="top">No</td>
</tr>
<tr>
<td valign="top">includes</td>
<td valign="top">comma- or space-separated list of patterns of files that must be included.
<td valign="top">comma- or space-separated list of patterns of files that must be included.
All files are included when omitted.</td>
<td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">includesfile</td>
<td valign="top">the name of a file. Each line of this file is taken to be
<td valign="top">the name of a file. Each line of this file is taken to be
an include pattern</td>
<td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">excludes</td>
<td valign="top">comma- or space-separated list of patterns of files that must be excluded.
<td valign="top">comma- or space-separated list of patterns of files that must be excluded.
No files (except default excludes) are excluded when omitted.</td>
<td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">excludesfile</td>
<td valign="top">the name of a file. Each line of this file is taken to be
<td valign="top">the name of a file. Each line of this file is taken to be
an exclude pattern</td>
<td valign="top" align="center">No</td>
</tr>
@@ -133,23 +134,16 @@ element which is used to perform Entity and URI resolution</p>
</tr>
<tr>
<td valign="top">in</td>
<td valign="top">specifies a single XML document to be styled. Should be used
<td valign="top">specifies a single XML document to be styled. Should be used
with the out attribute.</td>
<td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">out</td>
<td valign="top">specifies the output name for the styled result from the
<td valign="top">specifies the output name for the styled result from the
in attribute.</td>
<td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">outputtype</td>
<td valign="top">specifies the output method to be used. Only "xml" is
guaranteed to be supported by all translators. Xalan2 supports "xml",
"html", and "text"</td>
<td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">scanincludeddirectories</td>
<td valign="top">If any directories are matched by the
@@ -161,32 +155,58 @@ element which is used to perform Entity and URI resolution</p>
<h3>Parameters specified as nested elements</h3>
<h4>classpath</h4>
<p>The classpath to load the processor from can be specified via a
nested <code>&lt;classpath&gt;</code>, as well - that is, a
nested <code>&lt;classpath&gt;</code>, as well - that is, a
<a href="../using.html#path">path</a>-like structure.</p>

<h4>xmlcatalog</h4>
<p>The <a href="../CoreTypes/xmlcatalog.html">xmlcatalog</a>
<p>The <a href="../CoreTypes/xmlcatalog.html">xmlcatalog</a>
element is used to perform Entity and URI resolution.</p>

<h4>param</h4>
<p>Param is used to pass a parameter to the XSL stylesheet.</p>
<h4>Parameters</h4>
<table width="60%" border="1" cellpadding="2" cellspacing="0">
<tr>
<tr>
<td valign="top"><b>Attribute</b></td>
<td valign="top"><b>Description</b></td>
<td align="center" valign="top"><b>Required</b></td>
</tr>
<tr>
<tr>
<td valign="top">name</td>
<td valign="top">Name of the XSL parameter</td>
<td align="center" valign="top">Yes</td>
</tr>
<tr>
<tr>
<td valign="top">expression</td>
<td valign="top">XSL expression to be placed into the param. To pass a text
<td valign="top">XSL expression to be placed into the param. To pass a text
value into the style sheet it needs to be escaped using single quotes.</td>
<td align="center" valign="top">Yes</td>
</tr>
</table>

<h4>outputproperty ('trax' processors only)</h4>
<p>Used to specify how you wish the result tree to be output
as specified in the <a href="http://www.w3.org/TR/xslt#output">
XSLT specifications</a>.
<h4>Parameters</h4>
<table width="60%" border="1" cellpadding="2" cellspacing="0">
<tr>
<td valign="top"><b>Attribute</b></td>
<td valign="top"><b>Description</b></td>
<td align="center" valign="top"><b>Required</b></td>
</tr>
<tr>
<td valign="top">name</td>
<td valign="top">Name of the property</td>
<td align="center" valign="top">Yes</td>
</tr>
<tr>
<td valign="top">value</td>
<td valign="top">value of the property.</td>
<td align="center" valign="top">Yes</td>
</tr>
</table>

<h3>Examples</h3>
<blockquote>
<pre>
@@ -201,7 +221,7 @@ element is used to perform Entity and URI resolution.</p>
&lt;xslt basedir=&quot;doc&quot; destdir=&quot;build/doc&quot;
extension=&quot;.html&quot; style=&quot;style/apache.xsl&quot;&gt;
&lt;xmlcatalog&gt;
&lt;dtd
&lt;dtd
publicId=&quot;-//ArielPartners//DTD XML Article V1.0//EN&quot;
location=&quot;com/arielpartners/knowledgebase/dtd/article.dtd&quot;/&gt;
&lt;/xmlcatalog&gt;
@@ -216,6 +236,17 @@ element is used to perform Entity and URI resolution.</p>
element &lt;xsl:param name=&quot;date&quot;/&gt;, the variable
<code>$date</code> will subsequently have the value 07-01-2000.
</p>

<h4>Using output properties</h4>
<pre>&lt;xslt in=&quot;doc.xml&quot; out=&quot;build/doc/output.xml&quot;
style=&quot;style/apache.xsl&quot;&gt;
&lt;outputproperty name=&quot;method&quot; value=&quot;xml&quot;;/&gt;
&lt;outputproperty name=&quot;standalone&quot; value=&quot;yes&quot;/&gt;
&lt;outputproperty name=&quot;encoding&quot; value=&quot;iso8859_1&quot;/&gt;
&lt;outputproperty name=&quot;indent&quot; value=&quot;yes&quot;/&gt;
&lt;/xslt&gt;</pre>


</blockquote>
<hr>
<p align="center">Copyright &copy; 2000-2002 Apache Software Foundation. All rights


+ 13
- 20
docs/manual/Integration/VAJAntTool.html View File

@@ -57,8 +57,8 @@ support VAJ has not (out of the box).</P>
To Tool API'. Therefore builds containing VAJ tasks can also be executed
from the command line (Kudos to Glenn McAllister for describing the
concept and providing source code at
<A href="http://www7.software.ibm.com/vad.nsf/Data/Document4366">
http://www7.software.ibm.com/vad.nsf/Data/Document4366</A>.&nbsp;
<A href="http://www7.software.ibm.com/vad.nsf/Data/Document4366">
http://www7.software.ibm.com/vad.nsf/Data/Document4366</A>.&nbsp;

<LI>It is possible to cancel a running&nbsp;build
executed from the plugin
@@ -125,14 +125,7 @@ workspace.</P>
<td valign="top">version</TD>
<td valign="top">name of the requested version</TD>
<td valign="top" align="middle">yes</TD></TR>
<tr>
<td valign="top">remote</TD>
<td valign="top">
<P>name and port of a remote tool server. (format:
&lt;servername&gt;:&lt;port no&gt;).<BR>If this
attribute is set, the tasks will&nbsp;be executed on the specified tool
server.&nbsp;</P></TD>
<td valign="top" align="middle">no</TD></TR></TABLE>
</TABLE>

<h3>Example</H3>
<pre>&lt;vajload remote="localhost:32767"&gt;
@@ -246,11 +239,11 @@ This example exports all packages in the VAJ project 'MyProject', except
packages starting with 'test'.
<h3>Default Excludes</H3>
The default excludes are:<br>
<pre> IBM*/**
Java class libraries/**
Sun class libraries*/**
JSP Page Compile Generated Code/**
VisualAge*/**
<pre> IBM*/**
Java class libraries/**
Sun class libraries*/**
JSP Page Compile Generated Code/**
VisualAge*/**
</PRE>
<hr>
<h2><a name="vajimport"></A>VAJImport</H2>
@@ -273,17 +266,17 @@ from the file system into VAJ. These imports can be specified with a fileset.
<td valign="top" align="middle">yes</TD></TR>
<tr>
<td valign="top">importSources</TD>
<td valign="top">export source files (default:
<td valign="top">import source files (default:
"yes")</TD>
<td valign="top" align="middle">no</TD></TR>
<tr valign="top">
<td valign="top">importResources</TD>
<td valign="top">export resource files (default:
<td valign="top">import resource files (default:
"yes")</TD>
<td valign="top" align="middle">no</TD></TR>
<tr valign="top">
<td valign="top">importClasses</TD>
<td valign="top">export class files (default: "no")</TD>
<td valign="top">import class files (default: "no")</TD>
<td valign="top" align="middle">no</TD></TR>
<tr>
<td valign="top">remote</TD>
@@ -369,8 +362,8 @@ install directory. If You have installed it elsewhere, adapt the pathes below.
For
a good introduction into the VAJ Remote Tool Access see the
great introduction from Glenn McAllister at
<A href="http://www7.software.ibm.com/vad.nsf/Data/Document4366">
http://www7.software.ibm.com/vad.nsf/Data/Document4366</A>.&nbsp;It
<A href="http://www7.software.ibm.com/vad.nsf/Data/Document4366">
http://www7.software.ibm.com/vad.nsf/Data/Document4366</A>.&nbsp;It
is highly recommended to read this article before doing the installation (to
understand what you do :-) ).
<LI>insert the following lines into


+ 18
- 9
docs/manual/OptionalTasks/ejb.html View File

@@ -169,6 +169,13 @@ or are out of date, the ejbc tool is run to generate new versions.</p>
processed.</td>
<td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">keepgenerated</td>
<td>Controls whether ejbc will keep the
intermediate Java files used to build the class files. This can be
useful when debugging.</td>
<td>No, defaults to false.</td>
</tr>
</table>
<h3>Examples</h3>
<pre>&lt;ejbc descriptors=&quot;${gen.classes}&quot;
@@ -323,7 +330,7 @@ and hence ant, will not complete until the weblogic instance is stopped.</p>
</tr>
<tr>
<td valign="top">BEA Home</td>
<td valign="top">The location of the BEA Home qwhere the server's config is defined.
<td valign="top">The location of the BEA Home where the server's config is defined.
If this attribute is present, wlrun assumes that the server will
be running under Weblogic 6.0</td>
<td valign="top" align="center">N/A</td>
@@ -407,8 +414,8 @@ and hence ant, will not complete until the weblogic instance is stopped.</p>
<td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">args</td>
<td valign="top">Additional argument string passed to the Weblogic instance.</td>
<td valign="top">weblogicMainClass</td>
<td valign="top">name of the main class for weblogic</td>
<td valign="top" align="center">No</td>
<td valign="top" align="center">No</td>
</tr>
@@ -473,7 +480,7 @@ specify the BEA Home to have this task work correctly under 6.0</p>
<tr>
<td valign="top">classpath</td>
<td valign="top">The classpath to be used with the Java Virtual Machine that runs the Weblogic
Shutdown comment.</td>
Shutdown command.</td>
<td valign="top" align="center">Yes</td>
</tr>
<tr>
@@ -502,7 +509,7 @@ specify the BEA Home to have this task work correctly under 6.0</p>

<h3>Nested Element</h3>

<p>The classpath of the welstop task can be set by a &lt;classpath&gt; nested element.</p>
<p>The classpath of the wlstop task can be set by a &lt;classpath&gt; nested element.</p>

<h3>Examples</h3>

@@ -1002,8 +1009,8 @@ define this as META-INF/Customer-weblogic-cmp-rdbms-jar.xml.</p>
the weblogic class hierarchy. This should not be necessary if you
have weblogic in your classpath. If you do not, you should use a
nested &lt;dtd&gt; element, described above. If you do choose
to use an attribute, you should use the ejbdtd attribute in
preference to this one, anyway.
to use an attribute, you should use a
nested &lt;dtd&gt; element.
</td>
<td valign="top" align="center">No.</td>
</tr>
@@ -1071,7 +1078,7 @@ define this as META-INF/Customer-weblogic-cmp-rdbms-jar.xml.</p>
<tr>
<td valign="top">outputdir</td>
<td valign="top">If set ejbc will be given this directory as the output
desitination rather than a jar file. This allows for the
destination rather than a jar file. This allows for the
generation of &quot;exploded&quot; jars.
</td>
<td valign="top" align="center">No.</td>
@@ -1286,7 +1293,7 @@ the classpath of the ejbdeploy tool (look at the examples below).
<td valign="top" align="center">No, defaults to false</td>
</tr>
<tr>
<td valign="top">alwaysrebuild</td>
<td valign="top">rebuild</td>
<td valign="top">This controls whether ejbdeploy is called although no changes
have occurred.</td>
<td valign="top" align="center">No, defaults to false</td>
@@ -1308,6 +1315,7 @@ the classpath of the ejbdeploy tool (look at the examples below).
<li>SQL92</li> <li>SQL99</li> <li>DB2UDBWIN_V71</li>
<li>DB2UDBOS390_V6</li> <li>DB2UDBAS400_V4R5</li> <li>ORACLE_V8</li>
<li>INFORMIX_V92</li> <li>SYBASE_V1192</li> <li>MYSQL_V323</li>
<li>MSSQLSERVER_V7</li>
</ul>
This is also used to determine the name of the Map.mapxmi and
Schema.dbxmi files, for example Account-DB2UDBWIN_V71-Map.mapxmi
@@ -1623,6 +1631,7 @@ documentation for more details.</p>
<tr>
<td valign="Top">verbose</td>
<td valign="Top">Indicates whether or not to use -verbose switch. If

omitted, it defaults to <code>false</code>.</td>
<td align="Center" valign="Top">No</td>
</tr>


+ 73
- 76
docs/manual/OptionalTasks/jpcoverage.html View File

@@ -54,65 +54,57 @@ Perform code covering functions by comparing source code line execution to the p
</tr>
<tr>
<td valign="top">home</td>
<td valign="top">The directory where is intalled JProbe.</td>
<td valign="top">The directory where JProbe is intalled.</td>
<td align="center" valign="top">Yes</td>
</tr>
<tr>
<td valign="top">vm</td>
<td valign="top">
Indicates which virtual machine to run.
Must be one of "jdk117", "jdk118" or "java2".If "java2" is specified, the user is
also required to specify a path via <tt>javahome</tt>, otherwise it will check if
the current executing VM is 1.2+ and use its java.home property to determine its
location.
in the registry for the default 1.2.x (Java 2) VM.</td>
Indicates which virtual machine to run.
Must be one of "jdk117", "jdk118" or "java2".If "java2" is specified, the user is
also required to specify a path via <tt>javaexe</tt>, otherwise it will check if
the current executing VM is 1.2+ and use its java.home property to determine its
location.</td>
<td align="center" valign="top">No, default to embedded VM if 1.2+</td>
</tr>
<tr>
<td valign="top">javahome</td>
<td valign="top">For Java 2 only, specifies the path of the jdk1.2.x virtual
machine to be used. This is only valid when specifying the <tt>vm="java2"</tt>.</td>
<td align="center" valign="top">No, use only for java2</td>
</tr>
<tr>
<td valign="top">javaexe</td>
<td valign="top">Similar to <tt>javahome</tt>, except this is the path to
the java executable.</td>
<td align="center" valign="top">No, use only for java2</td>
<td valign="top">The path to the java executable.</td>
<td align="center" valign="top">No, use only for java2 vm.</td>
</tr>
<tr>
<td valign="top">applet</td>
<td valign="top">Run an applet. The default is false, unless the file under
analysis ends with htm or html.</td>
analysis ends with htm or html.</td>
<td align="center" valign="top">No, default is "false".</td>
</tr>
<tr>
<td valign="top">seedname</td>
<td valign="top">Seed name for the temporary snapshot files (files will be named
seed.jpc, seed1.jpc, seed2.jpc, ...)</td>
seed.jpc, seed1.jpc, seed2.jpc, ...)</td>
<td align="center" valign="top">No, default to &quot;snapshot&quot;</td>
</tr>
<tr>
<td valign="top">exitprompt</td>
<td valign="top">Toggles display of the console prompt: &quot;Press Enter to close
this window.&quot; &quot;always&quot;: Always displays the prompt. &quot;never&quot;: Never displays the
prompt. &quot;error&quot;: Only displays prompt after an error.</td>
this window.&quot; &quot;always&quot;: Always displays the prompt. &quot;never&quot;: Never displays the
prompt. &quot;error&quot;: Only displays prompt after an error.</td>
<td align="center" valign="top">No, default is "never"</td>
</tr>
<tr>
<td valign="top">finalsnapshot</td>
<td valign="top">Type of snapshot to send at program termination. Must be one
of &quot;none&quot;,&quot;coverage&quot;,&quot;all&quot;</td>
of &quot;none&quot;,&quot;coverage&quot;,&quot;all&quot;</td>
<td align="center" valign="top">No, default to &quot;coverage&quot;</td>
</tr>
<tr>
<td valign="top">recordfromstart</td>
<td valign="top">Must be one of "coverage", "all", "none". If you want
Coverage to start analyzing as soon as the program begins to run, use "all".
If not, select "none".</td>
Coverage to start analyzing as soon as the program begins to run, use "all".
If not, select "none".</td>
<td align="center" valign="top">No, default to "coverage"</td>
</tr>
<tr>
@@ -123,8 +115,8 @@ Perform code covering functions by comparing source code line execution to the p
<tr>
<td valign="top">snapshotdir</td>
<td valign="top">The path to the directory where snapshot files are stored.
Choose a directory that is reachable by both the remote and local computers,
and enter the same path on the command line and in the viewer.</td>
Choose a directory that is reachable by both the remote and local computers,
and enter the same path on the command line and in the viewer.</td>
<td align="center" valign="top">No, default to current directory</td>
</tr>
<tr>
@@ -135,7 +127,7 @@ Perform code covering functions by comparing source code line execution to the p
<tr>
<td valign="top">tracknatives</td>
<td valign="top">Test native methods. Note that testing native methods with
Java 2 disables the JIT</td>
Java 2 disables the JIT</td>
<td align="center" valign="top">No, default to &quot;false&quot;.</td>
</tr>
<tr>
@@ -214,14 +206,14 @@ The syntax is filters is similar to a <a href="../CoreTypes/fileset.html">filese
</tr>
<tr>
<td valign="top">defaultexclude</td>
<td valign="top">As a default, the coverage exclude all classes and methods.
<td valign="top">As a default, the coverage excludes all classes and methods.
Default filters are equivalent to
<pre>
&lt;filters&gt;
&lt;exclude class=&quot;*&quot; method=&quot;*&quot;/&gt;
&lt;/filters&gt;
</pre>
</td>
</pre>
</td>
<td align="center">No, default to "true"</td>
</tr>
</table>
@@ -239,12 +231,17 @@ with a <tt>name</tt> attribute.
<tr>
<td valign="top">class</td>
<td valign="top">The class mask as a simple regular expression</td>
<td align="center">No, default to *</td>
<td align="center">No, defaults to "*"</td>
</tr>
<tr>
<td valign="top">method</td>
<td valign="top">The method mask as a simple regular expression</td>
<td align="center">No, default to *</td>
<td align="center">No, defaults to "*"</td>
</tr>
<tr>
<td valign="top">enabled</td>
<td valign="top">is the filter enabled?</td>
<td align="center">No, defaults to true</td>
</tr>
</table>
</blockquote>
@@ -280,21 +277,21 @@ on method) and it has the following attributes:
<tr>
<td valign="top">name</td>
<td valign="top">The name of the method(s) as a regular expression. The name
is the fully qualified name on the form <tt>package.classname.method</tt></td>
is the fully qualified name on the form <tt>package.classname.method</tt></td>
<td align="center" valign="top">Yes</td>
</tr>
<tr>
<td valign="top">event</td>
<td valign="top">the event on the method that will trigger the action. Must be
&quot;enter&quot; or &quot;exit&quot;.</td>
&quot;enter&quot; or &quot;exit&quot;.</td>
<td align="center" valign="top">Yes</td>
</tr>
<tr>
<td valign="top">action</td>
<td valign="top">the action to execute. Must be one of &quot;clear&quot;,
&quot;pause&quot;, &quot;resume&quot;, &quot;snapshot&quot;, &quot;suspend&quot;,
or &quot;exit&quot;. They respectively clear recording, pause recording,
resume recording, take a snapshot, suspend the recording and exit the program.
&quot;pause&quot;, &quot;resume&quot;, &quot;snapshot&quot;, &quot;suspend&quot;,
or &quot;exit&quot;. They respectively clear recording, pause recording,
resume recording, take a snapshot, suspend the recording and exit the program.
</td>
<td align="center" valign="top">Yes</td>
</tr>
@@ -323,26 +320,26 @@ same class.</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<td width="12%" valign="top"><b>Attribute</b></td>
<td width="78%" valign="top"><b>Description</b></td>
<td width="10%" valign="top"><b>Required</b></td>
<td width="12%" valign="top"><b>Attribute</b></td>
<td width="78%" valign="top"><b>Description</b></td>
<td width="10%" valign="top"><b>Required</b></td>
</tr>
<tr>
<td valign="top">home</td>
<td valign="top">The directory where is installed JProbe.</td>
<td valign="top">home</td>
<td valign="top">The directory where JProbe is installed.</td>
<td align="center" valign="top">Yes</td>
</tr>
<tr>
<td valign="top">tofile</td>
<td valign="top">the output filename that will be the result
of the name.</td>
<td align="center" valign="top">Yes</td>
<td valign="top">tofile</td>
<td valign="top">the output filename that will be the result
of the name.</td>
<td align="center" valign="top">Yes</td>
</tr>
<tr>
<td valign="top">verbose</td>
<td valign="top">Perform the merge in verbose mode giving
details about the snapshot processing.</td>
<td align="center" valign="top">No. Default to false</td>
<td valign="top">verbose</td>
<td valign="top">Perform the merge in verbose mode giving
details about the snapshot processing.</td>
<td align="center" valign="top">No. Default to false</td>
</tr>
</table>

@@ -377,47 +374,47 @@ Oro</a> in Ant classpath, to run the <tt>reference</tt> feature.</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<td width="12%" valign="top"><b>Attribute</b></td>
<td width="78%" valign="top"><b>Description</b></td>
<td width="10%" valign="top"><b>Required</b></td>
<td width="12%" valign="top"><b>Attribute</b></td>
<td width="78%" valign="top"><b>Description</b></td>
<td width="10%" valign="top"><b>Required</b></td>
</tr>
<tr>
<td valign="top">home</td>
<td valign="top">The directory where is intalled JProbe.</td>
<td valign="top">home</td>
<td valign="top">The directory where JProbe is intalled.</td>
<td align="center" valign="top">Yes</td>
</tr>
<tr>
<td valign="top">format</td>
<td valign="top">The format of the generated report. Must be &quot;xml&quot;, &quot;html&quot; or &quot;text&quot;</td>
<td align="center" valign="top">No, default to &quot;html&quot;</td>
<td valign="top">format</td>
<td valign="top">The format of the generated report. Must be &quot;xml&quot;, &quot;html&quot; or &quot;text&quot;</td>
<td align="center" valign="top">No, default to &quot;html&quot;</td>
</tr>
<tr>
<td valign="top">type</td>
<td valign="top">The type of report to be generated. Must be &quot;executive&quot;,
&quot;summary&quot;, &quot;detailed&quot; or &quot;verydetailed&quot;</td>
<td align="center" valign="top">No. Default to &quot;detailed&quot;</td>
<td valign="top">type</td>
<td valign="top">The type of report to be generated. Must be &quot;executive&quot;,
&quot;summary&quot;, &quot;detailed&quot; or &quot;verydetailed&quot;</td>
<td align="center" valign="top">No. Default to &quot;detailed&quot;</td>
</tr>
<tr>
<td valign="top">percent</td>
<td valign="top">A numeric value for the threshold for printing methods. Must
be between 0 and 100.</td>
<td align="center" valign="top">No, default to 100</td>
<td valign="top">percent</td>
<td valign="top">A numeric value for the threshold for printing methods. Must
be between 0 and 100.</td>
<td align="center" valign="top">No, default to 100</td>
</tr>
<tr>
<td valign="top">snapshot</td>
<td valign="top">The name of the snapshot file that is the source to the report.</td>
<td align="center" valign="top">Yes</td>
<td valign="top">snapshot</td>
<td valign="top">The name of the snapshot file that is the source to the report.</td>
<td align="center" valign="top">Yes</td>
</tr>
<tr>
<td valign="top">tofile</td>
<td valign="top">The name of the generated output file</td>
<td align="center" valign="top">Yes</td>
<td valign="top">tofile</td>
<td valign="top">The name of the generated output file</td>
<td align="center" valign="top">Yes</td>
</tr>
<tr>
<td valign="top">includesource</td>
<td valign="top">Include text of the source code lines. Only applies to
<td valign="top">includesource</td>
<td valign="top">Include text of the source code lines. Only applies to
format=&quot;xml&quot; and type=&quot;verydetailed&quot;</td>
<td align="center" valign="top">No. Defaults to &quot;yes&quot;</td>
<td align="center" valign="top">No. Defaults to &quot;yes&quot;</td>
</tr>
</table>

@@ -526,7 +523,7 @@ one for JUnit. It needs either Xalan 1.2.2 or Xalan 2.x.</p>
</p>
<pre>&lt;style processor=&quot;xalan&quot; in=&quot;./reports/xml/results.xml&quot; out=&quot;./reports/html/dummy.file&quot;
style=&quot;${ant.home}/etc/coverage-frames.xsl&quot;&gt;
&lt;param name=&quot;output.dir&quot; expression=&quot;'${basedir}/reports/html'&quot;/&gt;
&lt;param name=&quot;output.dir&quot; expression=&quot;'${basedir}/reports/html'&quot;/&gt;
&lt;/style&gt;</pre>
<p>Xalan 2.x (note the parameter without single quote)</p>
<pre>&lt;style processor=&quot;trax&quot; in=&quot;./reports/xml/results.xml&quot; out=&quot;./reports/html/dummy.file&quot;
@@ -535,7 +532,7 @@ one for JUnit. It needs either Xalan 1.2.2 or Xalan 2.x.</p>
&lt;/style&gt;</pre>

<hr>
<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
Reserved.</p>
</body>
</html>

+ 0
- 4
docs/manual/OptionalTasks/jspc.html View File

@@ -174,10 +174,6 @@ classpath.
<h4>classpathref</h4>
a reference to an existing classpath

<h4>compilerclasspath</h4>

The classpath used to locate an optional compiler adapter specified by
<code>compiler</code>
<h4>webapp</h4>
Instructions to jasper to build an entire web application.
The base directory must have a WEB-INF subdirectory beneath it.


+ 2
- 2
docs/manual/OptionalTasks/perforce.html View File

@@ -279,8 +279,8 @@ although P4Edit can open files to the default change, P4Submit cannot yet submi
<h3>Examples</h3>
<pre>
&lt;p4edit
view=&quot;//depot/projects/projectfoo/main/src/Blah.java...&quot;
change=&quot;${p4.change}&quot; /&gt;
view=&quot;//depot/projects/projectfoo/main/src/Blah.java...&quot;
change=&quot;${p4.change}&quot; /&gt;
</pre>
<hr>



+ 18
- 18
docs/manual/OptionalTasks/pvcstask.html View File

@@ -16,7 +16,7 @@ by
<li>Don Jeffery (<a href="mailto:donj@apogeenet.com">donj@apogeenet.com</a>)</li>
</ul>
Version 1.1 - 2001/06/27<br>
<p>Problems with UNC pathnames and the use of () in paths are fixed and an updateonly
<p>Problems with UNC pathnames and the use of () in paths are fixed and an updateonly
argument introduced.</p>
Version 1.0 - 2001/01/31<br>
<p>Initial release.</p>
@@ -34,7 +34,7 @@ The pvcs 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.merant.com/products/pvcs">Merant</a>.
<br>
Before using this tag, the user running ant must have access to the commands
Before using this tag, the user running ant must have access to the commands
of PVCS (get and pcli) and must have access to the repository. Note that the way to specify
the repository is platform dependent so use property to specify location of repository.
<br>
@@ -88,8 +88,8 @@ specified)</td>
<tr>
<td VALIGN=TOP WIDTH="12%">promotiongroup</td>

<td VALIGN=TOP WIDTH="78%">Only files within this promotion group are extracted. Using
both the <i>label</i> and the <i>promotiongroup</i> tag will cause the files in the
<td VALIGN=TOP WIDTH="78%">Only files within this promotion group are extracted. Using
both the <i>label</i> and the <i>promotiongroup</i> tag will cause the files in the
promotion group and with that label to be extracted.
</td>

@@ -125,34 +125,34 @@ tag expects the executables to be found using the PATH environment variable.</td

<td VALIGN=TOP WIDTH="10%">No</td>
</tr>
<tr>
<tr>
<td VALIGN=TOP WIDTH="12%">ignorereturncode</td>
<td VALIGN=TOP WIDTH="78%">If set to <i>true</i> the return value from executing
<td VALIGN=TOP WIDTH="78%">If set to <i>true</i> the return value from executing
the pvcs commands are ignored.</td>
<td VALIGN=TOP WIDTH="10%">No</td>
</tr>
<tr>
<tr>
<td VALIGN=TOP WIDTH="12%">updateonly</td>
<td VALIGN=TOP WIDTH="78%">If set to <i>true</i> files are gotten only if
<td VALIGN=TOP WIDTH="78%">If set to <i>true</i> files are gotten only if
newer than existing local files.</td>
<td VALIGN=TOP WIDTH="10%">No</td>
</tr>
<tr>
<tr>
<td valign="TOP">filenameformat</td>
<td valign="TOP">The format of your folder names in a
format suitable for <code>java.text.MessageFormat</code>.
Index 1 of the format will be used as the file name.
Defaults to <code>{0}-arc({1})</code>.</td>
Defaults to <code>{0}-arc({1})</code>. Repositories where
the archive extension is not <code>-arc</code> should set
this.</td>
<td valign="TOP">No</td>
</tr>
<tr>
<tr>
<td valign="TOP">linestart</td>
<td valign="TOP">What a valid return value from PVCS looks like
when it describes a file. Defaults to <code>&quot;P:</code>.
If you are not using an UNC name for your repository and the
drive letter <code>P</code> is incorrect for your setup, you may
need to change this value, UNC names will always be
accepted.</td>
<td valign="TOP">Used to parse the output of the pcli
command. It defaults to <code>&quot;P:</code>. The parser already
knows about / and \\, this property is useful in cases where the
repository is accessed on a Windows platform via a drive letter
mapping.</td>
<td valign="TOP">No</td>
</tr>
</table>


+ 4
- 4
docs/manual/OptionalTasks/replaceregexp.html View File

@@ -66,10 +66,10 @@ We <b>strongly</b> recommend that you use Jakarta Oro.
<td valign="top">flags</td>
<td valign="top">The flags to use when matching the regular expression. For more
information, consult the Perl5 syntax<br />
g --> Global replacement. Replace all occurences found<br />
i --> Case Insensitive. Do not consider case in the match<br />
m --> Multiline. Treat the string as multiple lines of input, using "^" and "$" as the start or end of any line, respectively, rather than start or end of string.<br />
s --> Singleline. Treat the string as a single line of input, using "." to match any character, including a newline, which normally, it would not match.<br />
g : Global replacement. Replace all occurences found<br />
i : Case Insensitive. Do not consider case in the match<br />
m : Multiline. Treat the string as multiple lines of input, using "^" and "$" as the start or end of any line, respectively, rather than start or end of string.<br />
s : Singleline. Treat the string as a single line of input, using "." to match any character, including a newline, which normally, it would not match.<br />
<td valign="top" align="center">No</td>
</tr>
<tr>


+ 8
- 2
docs/manual/OptionalTasks/rpm.html View File

@@ -37,7 +37,7 @@
</tr>
<tr>
<td valign="top">cleanBuildDir</td>
<td valign="top">his will remove the generated files in the BUILD
<td valign="top">This will remove the generated files in the BUILD
directory.</td>
<td align="center" valign="top">No</td>
</tr>
@@ -47,6 +47,12 @@ directory.</td>
<td align="center" valign="top">No</td>
</tr>
<tr>
<td valign="top">removeSource</td>
<td valign="top"> Flag (optional, default=false)
to remove the sources after the build.
See the the <tt>--rmsource</tt> option of rpmbuild.</td>
<td align="center" valign="top">No</td>
</tr> <tr>
<td valign="top">command</td>
<td valign="top">very similar idea to the cvs task. the default is "-bb"</td>
<td align="center" valign="top">No</td>
@@ -59,7 +65,7 @@ directory.</td>
</table>
<hr>

<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
Reserved.</p>

</body>


+ 1
- 1
docs/manual/OptionalTasks/script.html View File

@@ -35,7 +35,7 @@ still required.
<td valign="top">language</td>
<td valign="top">The programming language the script is written in.
Must be a supported BSF language</td>
<td valign="top" align="center">No</td>
<td valign="top" align="center">Yes</td>
</tr>
<tr>
<td valign="top">src</td>


+ 2
- 2
docs/manual/OptionalTasks/serverdeploy.html View File

@@ -190,7 +190,7 @@ required for all actions.
It is in the form <code>&lt;component&gt;:&lt;target1&gt;,&lt;target2&gt;...</code>
Where component is the archive name (minus the .jar, .ear, .war
extension). Targets are the servers where the components will be deployed</td>
<td>Yes</td>
<td>no</td>
</tr>
<tr>
<td valign="top">debug</td>
@@ -222,7 +222,7 @@ WebLogic server:</p>

<pre>
&lt;serverdeploy action=&quot;delete&quot; source=&quot;${lib.dir}/ejb_myApp.jar&quot;/&gt
&lt;weblogic application=&quot;myapp&quot
&lt;weblogic application=&quot;myapp&quot;
server=&quot;t3://myserver:7001&quot;
classpath=&quot;${weblogic.home}/lib/weblogic.jar&quot;
username=&quot;${user.name}&quot;


+ 5
- 5
docs/manual/OptionalTasks/sos.html View File

@@ -23,7 +23,7 @@ Version 1.1 2002/01/23
<h2>Contents</h2>

<ul>
<li><a href="#intro">Introduction</a></li>
<li><a href="#intro">Introduction</a></li>
<li><a href="#tasks">The Tasks</a></li>

</ul>
@@ -55,17 +55,17 @@ have been tested with Linux, Solaris &amp; Windows2000.</p>
<td>Retrieves a read-only copy of the specified project or file.</td>
</tr>
<tr>
<td><a href="#SOSLabel"> soslabel</a></td>
<td><a href="#SOSLabel">soslabel</a></td>
<td>Assigns a label to the specified project.</td>
</tr>
<tr>
<td><a href="#SOSCheckIn"> soscheckin</a></td>
<td><a href="#SOSCheckIn">soscheckin</a></td>
<td>Updates VSS with changes made to a checked out file or project,
and unlocks the VSS master copy.</td>
</tr>
<tr>
<td><a href="#SOSCheckOut"> soscheckout</a></td>
<td>Retrieves a read-write copy of&nbsp;the specified project
<td><a href="#SOSCheckOut">soscheckout</a></td>
<td>Retrieves a read-write copy of the specified project
or file, locking the&nbsp;VSS master copy</td>
</tr>



+ 23
- 14
docs/manual/OptionalTasks/splash.html View File

@@ -28,6 +28,26 @@ whilst waiting for your builds to complete...</p>
<td valign="top" align="center">No</td>
<td valign="top" align="center">antlogo.gif from the classpath</td>
</tr>
<tr>
<td valign="top">showduration</td>
<td valign="top">Initial period to pause the build to show the
splash in milliseconds.</td>
<td valign="top" align="center">No</td>
<td valign="top" align="center">5000 ms</td>
</tr>
</table>
<h3>Deprecated properties</h3>
The following properties can be used to configure the proxy settings to retrieve
an image from behind a firewall. However, the settings apply not just to this
task, but to all following tasks. Therefore they are now mostly deprecated in
preference to the &lt;setproxy&gt; task, that makes it clear to readers of
the build exactly what is going on. We say mostly as this task's support
includes proxy authentication, so you may still need to use its
proxy attributes.
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<td valign="top">useproxy</td>
<td valign="top">Use a proxy to access imgurl. Note: Only tested
@@ -60,13 +80,7 @@ whilst waiting for your builds to complete...</p>
<td valign="top" align="center">No</td>
<td valign="top" align="center">None</td>
</tr>
<tr>
<td valign="top">showduration</td>
<td valign="top">Initial period to pause the build to show the
splash in milliseconds.</td>
<td valign="top" align="center">No</td>
<td valign="top" align="center">5000 ms</td>
</tr>

</table>
<h3>Examples</h3>
<blockquote><pre>
@@ -76,15 +90,10 @@ whilst waiting for your builds to complete...</p>
<blockquote><pre>
&lt;splash imageurl=&quot;http://jakarta.apache.org/images/jakarta-logo.gif&quot;
useproxy=&quot;true&quot;
showduration=&quot;5000&quot;
proxy=&quot;proxy.mydomain.com&quot;
port=&quot;8080&quot;
user=&quot;BuildEng&quot;
password=&quot;LetMePass&quot;/>
showduration=&quot;5000&quot;/>

</pre></blockquote>
<p>Splashes the jakarta logo, via a connection through the proxy at
proxy.mydomain.com on port 8080 (as user BuildEng/LetMePass) for
<p>Splashes the jakarta logo, for
an initial period of 5 seconds.</p>
<hr>
<p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights


+ 24
- 24
docs/manual/OptionalTasks/starteam.html View File

@@ -170,7 +170,7 @@ If false (default) has no effect.
username="auser"
password="secret"
rootlocalfolder="C:\dev\buildtest\co"
force="true"
force="true"
/&gt;
</pre>

@@ -184,7 +184,7 @@ created for them and any non-StarTeam files found in the tree will be deleted.
username="auser"
password="secret"
rootlocalfolder="C:\dev\buildtest\co"
forced="true"
forced="true"
/&gt;
</pre>
And this is a simpler way of accomplishing the same thing as the previous example, using the URL attribute.
@@ -197,7 +197,7 @@ And this is a simpler way of accomplishing the same thing as the previous exampl
rootstarteamfolder="\Dev"
excludes="*.bak *.old"
label="v2.6.001"
forced="true"
forced="true"
/&gt;
</pre>

@@ -211,7 +211,7 @@ end in <i>.bak</i> or <i>.old</i> with the label <i>v2.6.001</i>.
rootlocalfolder="C:\dev\buildtest\co"
includes="*.htm,*.html"
excludes="index.*"
forced="true"
forced="true"
/&gt;
</pre>

@@ -227,8 +227,8 @@ not be checked out by this command.
rootlocalfolder="C:\dev\buildtest\co"
includes="*.htm,*.html"
excludes="index.*"
forced="true"
recursive="false"
forced="true"
recursive="false"
/&gt;
</pre>
This example is like the previous one, but will only check out files in
@@ -240,7 +240,7 @@ C:\dev\buildtest\co, because of the turning off of the recursive attribute.
password="secret"
rootstarteamfolder="src/java"
rootlocalfolder="C:\dev\buildtest\co"
forced="true"
forced="true"
/&gt;
</pre>
<br></br>
@@ -258,7 +258,7 @@ C:\dev\buildtest\co, because of the turning off of the recursive attribute.
password="secret"
rootstarteamfolder="src/java"
rootlocalfolder="C:\dev\buildtest\co\src\java"
forced="true"
forced="true"
/&gt;
</pre>

@@ -351,7 +351,7 @@ change it. If false (default) lock status will not change.
username="auser"
password="secret"
rootlocalfolder="C:\dev\buildtest\co"
forced="true"
forced="true"
/&gt;
</pre>

@@ -365,7 +365,7 @@ For files and folders in the local tree but not in starteam, nothing will be don
username="auser"
password="secret"
rootlocalfolder="C:\dev\buildtest\co"
forced="true"
forced="true"
/&gt;
</pre>
And this is a simpler way of giving the same commands as the command above using the URL shortcut.
@@ -377,7 +377,7 @@ And this is a simpler way of giving the same commands as the command above using
rootlocalfolder="C:\dev\buildtest\co"
rootstarteamfolder="\Dev"
excludes="*.bak *.old"
forced="true"
forced="true"
/&gt;
</pre>

@@ -391,7 +391,7 @@ end in <i>.bak</i> or <i>.old</i> from the tree rooted at"C:\dev\buildtest\co" .
rootlocalfolder="C:\dev\buildtest\co"
includes="*.htm,*.html"
excludes="index.*"
forced="true"
forced="true"
/&gt;
</pre>

@@ -408,8 +408,8 @@ not be checked in by this command.
rootstarteamfolder="src/java"
includes="*.htm,*.html"
excludes="index.*"
forced="true"
recursive="false"
forced="true"
recursive="false"
/&gt;
</pre>
This example is like the previous one, but will only check in files from
@@ -422,8 +422,8 @@ C:\dev\buildtest\co, because of the turning off of the recursive attribute.
rootlocalfolder="C:\dev\buildtest\co"
rootstarteamfolder="src/java"
includes="version.txt"
forced="true"
recursive="false"
forced="true"
recursive="false"
/&gt;
</pre>
This example is like the previous one, but will only check only in one file, C:\dev\buildtest\co\version.txt to the StarTeam folder src/java.
@@ -435,10 +435,10 @@ This example is like the previous one, but will only check only in one file, C:\
rootlocalfolder="C:\dev\buildtest\co"
rootstarteamfolder="src/java"
includes="version.java"
forced="true"
recursive="false"
addUncontrolled="true"
comment="Fix Bug #667"
forced="true"
recursive="false"
addUncontrolled="true"
comment="Fix Bug #667"
/&gt;
</pre>
This example is like the previous one, but will only check only in one file, C:\dev\buildtest\co\version.java to the StarTeam folder src/java. Because the <i>addUncontrolled</i> attribute has been set, if StarTeam does not already control this file in this location, it will be added to the repository. Also, it will write a comment to the repository for this version of the file.
@@ -449,7 +449,7 @@ This example is like the previous one, but will only check only in one file, C:\
password="secret"
rootstarteamfolder="src/java"
rootlocalfolder="C:\dev\buildtest\co"
forced="true"
forced="true"
/&gt;
</pre>
<br></br>
@@ -467,7 +467,7 @@ This example is like the previous one, but will only check only in one file, C:\
password="secret"
rootstarteamfolder="src/java"
rootlocalfolder="C:\dev\buildtest\co\src\java"
forced="true"
forced="true"
/&gt;
</pre>

@@ -606,8 +606,8 @@ while adding a <i>rootlocalfolder</i> and an <i>excludes</i> param ...
&lt;stlist url="WASHINGTON:49201/build"
username="auser"
password="secret"
rootlocalfolder="srcdir2"
excludes="*.properties"
rootlocalfolder="srcdir2"
excludes="*.properties"
/&gt;
</pre>



+ 6
- 1
docs/manual/OptionalTasks/stylebook.html View File

@@ -14,6 +14,11 @@ Unlike the commandline version of this tool, all three arguments
are required to run stylebook.</p>
<p><b>Note:</b> This task depends on external libraries not included in the Ant distribution.
See <a href="../install.html#librarydependencies">Library Dependencies</a> for more information.</p>
<p>
Being extended from &lt;Java&gt;, all the parent's attributes
and options are available. Do not set any apart from the <tt>classpath</tt>
as they are not guaranteed to be there in future.
</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
@@ -57,7 +62,7 @@ The above will generate documentation in build/docs starting from the book
src/xdocs/book.xml and using the skin located in directory src/skins/myskin.

<hr>
<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
Reserved.</p>

</body>


+ 17
- 8
docs/manual/OptionalTasks/vss.html View File

@@ -31,7 +31,11 @@ The <code>org.apache.tools.ant.taskdefs.optional.vss</code> package consists of
vss functionality as well as some Ant tasks encapsulating frequently used vss commands.
Although it is possible to use these commands on the desktop,
they were primarily intended to be used by automated build systems.</p>

<p>
If you get a CreateProcesss IOError=2 when running these, it means
that ss.exe was not found. Check to see if you can run it from the
command line -you may need to alter your path, or set the <tt>ssdir</tt>
property.
<h2><a name="tasks">The Tasks</a></h2>

<table border="0" cellspacing="0" cellpadding="3">
@@ -64,9 +68,9 @@ they were primarily intended to be used by automated build systems.</p>
<td>Change the current project being used in VSS</td>
</tr>
<tr>
<td><a href="#vsscreate">vsscreate</a></td>
<td>Creates a project in VSS.</td>
</tr>
<td><a href="#vsscreate">vsscreate</a></td>
<td>Creates a project in VSS.</td>
</tr>
</table>

<hr>
@@ -114,17 +118,17 @@ label only one will be used in the order version, date, label.</p>
</tr>
<tr>
<td>serverPath</td>
<td>directory where <code>srssafe.ini</code> resides.</td>
<td>directory where <code>ss.ini</code> resides.</td>
<td>No</td>
</tr>
<tr>
<td>writable</td>
<td>true or false</td>
<td>true or false<; default false/td>
<td>No</td>
</tr>
<tr>
<td>recursive</td>
<td>true or false</td>
<td>true or false; default false</td>
<td>No</td>
</tr>
<tr>
@@ -303,7 +307,7 @@ Task to perform HISTORY commands to Microsoft Visual SourceSafe.
</tr>
<tr>
<td>toDate</td>
<td>Start date for comparison</td>
<td>End date for comparison</td>
<td>See below</td>
</tr>
<tr>
@@ -343,6 +347,11 @@ Task to perform HISTORY commands to Microsoft Visual SourceSafe.
<td>brief, codediff, default or nofile. The default is default.</td>
<td>No</td>
</tr>
<tr>
<td>user</td>
<td>Name the user whose changes we would like to see</td>
<td>No</td>
</tr>
</table>

<h4>Specifying the time-frame</h4>


+ 9
- 9
docs/manual/OptionalTasks/xmlvalidate.html View File

@@ -15,8 +15,8 @@ task uses the SAX2 parser implementation provided by JAXP by default
SAX1/2 parser if needed.</p>

<p>This task supports the use of nested <a
href="../CoreTypes/xmlcatalog.html">xmlcatalog</a> elements and/or nested
&lt;dtd&gt; elements which are used to resolve DTDs and entities.</p>
href="../CoreTypes/xmlcatalog.html">xmlcatalog</a> elements and/or nested
<tt>&lt;dtd&gt;</tt> elements which are used to resolve DTDs and entities.</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
@@ -34,7 +34,7 @@ href="../CoreTypes/xmlcatalog.html">xmlcatalog</a> elements and/or nested
<td valign="top">lenient</td>
<td valign="top">
if true, only check the xml document is well formed
(ignored if the specified parser is as SAX1 parser)
(ignored if the specified parser is as SAX1 parser)
</td>
<td valign="top" align="center">No</td>
</tr>
@@ -70,19 +70,19 @@ href="../CoreTypes/xmlcatalog.html">xmlcatalog</a> elements and/or nested
<td width="10%" valign="top"><b>Required</b></td>
</tr>
<tr>
<td valign="top">publicId</td>
<td valign="top">publicId</td>
<td valign="top">Public ID of the DTD to resolve</td>
<td align="center" valign="top">Yes</td>
</tr>
<tr>
<td valign="top">location</td>
<td valign="top">location</td>
<td valign="top">Location of the DTD to use, which can be a file,
a resource, or a URL</td>
<td align="center" valign="top">Yes</td>
</tr>
</table>
<h4>xmlcatalog</h4>
<p>The <a href="../CoreTypes/xmlcatalog.html">xmlcatalog</a>
<p>The <a href="../CoreTypes/xmlcatalog.html">xmlcatalog</a>
element is used to perform Entity resolution.</p>


@@ -93,9 +93,9 @@ element is used to perform Entity resolution.</p>
&lt;xmlvalidate failonerror="no" lenient="yes" warn="yes"
classname="org.apache.xerces.parsers.SAXParser" &gt;
classpath="lib/xerces.jar"&gt;
&lt;fileset dir="src" includes="style/*.xsl"/&gt;
&lt;fileset dir="src" includes="style/*.xsl"/&gt;
&lt;/xmlvalidate&gt;
&lt;xmlvalidate file="struts-config.xml" warn="false"&gt;
&lt;dtd publicId="-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
location="struts-config_1_0.dtd"/&gt;
@@ -109,7 +109,7 @@ element is used to perform Entity resolution.</p>
&lt;xmlvalidate failonerror="no"&gt;
&lt;fileset dir="${project.dir}" includes="**/*.xml"/&gt;
&lt;xmlcatalog&gt;
&lt;dtd
&lt;dtd
publicId=&quot;-//ArielPartners//DTD XML Article V1.0//EN&quot;
location=&quot;com/arielpartners/knowledgebase/dtd/article.dtd&quot;/&gt;
&lt;/xmlcatalog&gt;


+ 3
- 0
docs/manual/coretasklist.html View File

@@ -11,6 +11,8 @@
<h2><a href="toc.html" target="navFrame">Table of Contents</a></h2>

<a href="optionaltasklist.html" target="navFrame">Optional Tasks</a><br>
<a href="tasksoverview.html" target="mainFrame">Overview of Ant Tasks</a><br>
<a href="conceptstypeslist.html" target="navFrame">Concepts and Types</a><br>

<h3>Core Tasks</h3>
<a href="CoreTasks/ant.html">Ant</a><br>
@@ -74,6 +76,7 @@
<a href="CoreTasks/style.html">Style</a><br>
<a href="CoreTasks/tar.html">Tar</a><br>
<a href="CoreTasks/taskdef.html">Taskdef</a><br>
<a href="CoreTasks/tempfile.html">Tempfile</a><br>
<a href="CoreTasks/touch.html">Touch</a><br>
<a href="CoreTasks/tstamp.html">TStamp</a><br>
<a href="CoreTasks/typedef.html">Typedef</a><br>


+ 2
- 0
docs/manual/dirtasks.html View File

@@ -161,6 +161,8 @@ They are:</p>
**/SCCS
**/SCCS/**
**/vssver.scc
**/.svn
**/.svn/**
</pre>
<p>If you do not want these default excludes applied, you may disable them with the
<code>defaultexcludes=&quot;no&quot;</code> attribute.</p>


+ 20
- 5
docs/manual/install.html View File

@@ -67,10 +67,25 @@ compiler is supported.
</p>
<hr>
<h2><a name="installing">Installing Ant</a></h2>
<p>The binary distribution of Ant consists of three directories:
<code>bin</code>,
<code>docs</code> and
<code>lib</code>
<p>The binary distribution of Ant consists of the following directory layout:
<pre>
ant
+--- bin // contains launcher scripts
|
+--- lib // contains Ant jars plus necessary dependencies
|
+--- docs // contains documentation
| +--- ant2 // a brief description of ant2 requirements
| |
| +--- images // various logos for html documentation
| |
| +--- manual // Ant documentation (a must read ;-)
|
+--- etc // contains xsl goodies to:
// - create an enhanced report from xml output of various tasks.
// - migrate your build files and get rid of 'deprecated' warning
// - ... and more ;-)
</pre>

Only the <code>bin</code> and <code>lib</code> directories are
required to run Ant.
@@ -193,7 +208,7 @@ for examples on how to do this for your operating system. </p>

<p>Make sure you have downloaded any auxiliary jars required to
build tasks you are interested in. These should either be available
on the CLASSPATH or added to the <code>lib/optional</code>
on the CLASSPATH or added to the <code>lib</code>
directory.
See <a href="#librarydependencies">Library Dependencies</a>
for a list of jar requirements for various features.


+ 7
- 4
docs/manual/optionaltasklist.html View File

@@ -11,6 +11,8 @@
<h2><a href="toc.html" target="navFrame">Table of Contents</a></h2>

<a href="coretasklist.html" target="navFrame">Core Tasks</a><br>
<a href="tasksoverview.html" target="mainFrame">Overview of Ant Tasks</a><br>
<a href="conceptstypeslist.html" target="navFrame">Concepts and Types</a><br>

<h3>Optional Tasks</h3>
<a href="OptionalTasks/dotnet.html">.NET Tasks</a><br>
@@ -23,10 +25,10 @@
<a href="OptionalTasks/echoproperties.html">Echoproperties</a><br>
<a href="OptionalTasks/ftp.html">FTP</a><br>
<a href="OptionalTasks/icontract.html">IContract</a><br>
<a href="OptionalTasks/jarlib-available.html">jarlib-available</a><br>
<a href="OptionalTasks/jarlib-display.html">jarlib-display</a><br>
<a href="OptionalTasks/jarlib-manifest.html">jarlib-manifest</a><br>
<a href="OptionalTasks/jarlib-resolve.html">jarlib-resolve</a><br>
<a href="OptionalTasks/jarlib-available.html">Jarlib-available</a><br>
<a href="OptionalTasks/jarlib-display.html">Jarlib-display</a><br>
<a href="OptionalTasks/jarlib-manifest.html">Jarlib-manifest</a><br>
<a href="OptionalTasks/jarlib-resolve.html">Jarlib-resolve</a><br>
<a href="OptionalTasks/javacc.html">JavaCC</a><br>
<a href="OptionalTasks/javah.html">Javah</a><br>
<a href="OptionalTasks/jspc.html">JspC</a><br>
@@ -49,6 +51,7 @@
<a href="OptionalTasks/replaceregexp.html">ReplaceRegExp</a><br>
<a href="OptionalTasks/rpm.html">Rpm</a><br>
<a href="OptionalTasks/serverdeploy.html">ServerDeploy</a><br>
<a href="OptionalTasks/setproxy.html">Setproxy</a><br>
<a href="OptionalTasks/script.html">Script</a><br>
<a href="OptionalTasks/sound.html">Sound</a><br>
<a href="OptionalTasks/sos.html">SourceOffSite</a><br>


+ 67
- 0
docs/manual/tasksoverview.html View File

@@ -21,6 +21,7 @@ documentation.</p>
<a href="#ejb">EJB Tasks</a><br>
<a href="#exec">Execution Tasks</a><br>
<a href="#file">File Tasks</a><br>
<a href="#extensions">Java2 Extensions Tasks</a><br>
<a href="#log">Logging Tasks</a><br>
<a href="#mail">Mail Tasks</a><br>
<a href="#misc">Miscellaneous Tasks</a><br>
@@ -561,6 +562,12 @@ documentation.</p>
files.</p></td>
</tr>

<tr valign="top">
<td nowrap><a href="CoreTasks/tempfile.html">Tempfile</a></td>
<td><p>Generates a name for a new temporary file and sets the specified
property to that name.</p></td>
</tr>

<tr valign="top">
<td nowrap><a href="CoreTasks/touch.html">Touch</a></td>
<td><p>Changes the modification time of a file and possibly creates it at
@@ -568,6 +575,60 @@ documentation.</p>
</tr>
</table>

<p></p>
<table width="100%" border="0" cellpadding="4" cellspacing="0">
<th align="left">
<font size="+0" face="arial,helvetica,sanserif">
<a name="extensions">Java2 Extensions Tasks</a></th>
</font>
<font size="-1" face="arial,helvetica,sanserif">
<th align="right"><a href="#top">[Back to top]</a></th>
</font>
</table>
<table width="100%" border="1" cellpadding="4" cellspacing="0">
<tr valign="top">
<th nowrap>Task Name</th>
<th>Description</th>
</tr>

<tr valign="top">
<td nowrap>
<a href="OptionalTasks/jarlib-available.html">Jarlib-available</a></td>
<td><p>Check whether an extension is present in a FileSet or an
ExtensionSet. If the extension is present, the specified property is
set.</p>
</td>
</tr>

<tr valign="top">
<td nowrap>
<a href="OptionalTasks/jarlib-display.html">Jarlib-display</a></td>
<td><p>Display the &quot;Optional Package&quot; and
&quot;Package Specification&quot; information contained within the
specified jars.</p>
</td>
</tr>

<tr valign="top">
<td nowrap>
<a href="OptionalTasks/jarlib-manifest.html">Jarlib-manifest</a></td>
<td><p>Task to generate a manifest that declares all the dependencies
in manifest. The dependencies are determined by looking in the
specified path and searching for Extension/&quot;Optional Package&quot;
specifications in the manifests of the jars.</p>
</td>
</tr>

<tr valign="top">
<td nowrap>
<a href="OptionalTasks/jarlib-resolve.html">Jarlib-resolve</a></td>
<td><p>Try to locate a jar to satisfy an extension, and place the
location of the jar into the specified property.</p>
</td>
</tr>
</table>

<p></p>
<p></p>
<table width="100%" border="0" cellpadding="4" cellspacing="0">
<th align="left">
@@ -949,7 +1010,13 @@ documentation.</p>
nested <code>&lt;read&gt;</code> and <code>&lt;write&gt;</code> tags
to indicate strings to wait for and specify text to send.</p></td>
</tr>
<tr valign="top">
<td nowrap><a href="OptionalTasks/setproxy.html">setproxy</a></td>
<td><p>Sets Java's web proxy properties, so that tasks and code run
in the same JVM can have through-the-firewall access to remote web sites.</p></td>
</tr>

</table>

<p></p>


+ 1
- 1
docs/manual/using.html View File

@@ -30,7 +30,7 @@ to be unique. (For additional information, see the
<tr>
<td valign="top">default</td>
<td valign="top">the default target to use when no target is supplied.</td>
<td align="center" valign="top">No. Will default to "main" if not specified.</td>
<td align="center" valign="top">Yes.</td>
</tr>
<tr>
<td valign="top">basedir</td>


+ 10
- 3
lib/README View File

@@ -2,7 +2,14 @@ Please refer to the Ant manual under Installing Ant / Library
Dependencies for a list of the jar requirements for various optional
tasks and features.

This directory contains xercesImpl.jar and xmlParserAPIs from the
2.0.1 release of Apache Xerces. For more information or newer
releases see <http://xml.apache.org/xerces2-j/>.
This directory contains xercesImpl.jar from the 2.0.2 release of
Apache Xerces. For more information or newer releases see
<http://xml.apache.org/xerces2-j/>. See the file LICENSE.xerces for
the terms of distribution.

It also contains xml-apis.jar, an Apache-controlled collection of
standard classes from the 1.0b2 release of the Apache XML-Commons
release. For more information or newer releases see
<http://xml.apache.org/commons/>. See the files LICENSE.dom and
LICENSE.sax for the terms of distribution.


BIN
lib/xercesImpl.jar View File


+ 17
- 0
src/etc/testcases/core/include/included_file_parse_error/build.xml View File

@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<!DOCTYPE project [
<!ENTITY included_file SYSTEM "file:./included_file.xml">
]>

<project name="test" default="test" basedir=".">

<target name="setup">
</target>

&included_file;

<target name="test" depends="included-target">
<echo>test target ran.</echo>
</target>

</project>

+ 4
- 0
src/etc/testcases/core/include/included_file_parse_error/included_file.xml View File

@@ -0,0 +1,4 @@
<target name="included-target">
extraneous_text
<echo>included-target ran.</echo>
</target>

+ 17
- 0
src/etc/testcases/core/include/included_file_task_error/build.xml View File

@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<!DOCTYPE project [
<!ENTITY included_file SYSTEM "file:./included_file.xml">
]>

<project name="test" default="test" basedir=".">

<target name="setup">
</target>

&included_file;

<target name="test" depends="included-target">
<echo>test target ran.</echo>
</target>

</project>

+ 4
- 0
src/etc/testcases/core/include/included_file_task_error/included_file.xml View File

@@ -0,0 +1,4 @@
<target name="included-target">
<copy file="nonexistent-file" todir="/non/existent/dir"/>
<echo>included-target ran.</echo>
</target>

+ 19
- 0
src/etc/testcases/core/include/including_file_parse_error/build.xml View File

@@ -0,0 +1,19 @@
<?xml version="1.0"?>
<!DOCTYPE project [
<!ENTITY included_file SYSTEM "file:./included_file.xml">
]>

<project name="test" default="test" basedir=".">

<target name="setup">
</target>

&included_file;

extraneous_text

<target name="test" depends="included-target">
<echo>test target ran.</echo>
</target>

</project>

+ 3
- 0
src/etc/testcases/core/include/including_file_parse_error/included_file.xml View File

@@ -0,0 +1,3 @@
<target name="included-target">
<echo>included-target ran.</echo>
</target>

+ 18
- 0
src/etc/testcases/core/include/including_file_task_error/build.xml View File

@@ -0,0 +1,18 @@
<?xml version="1.0"?>
<!DOCTYPE project [
<!ENTITY included_file SYSTEM "file:./included_file.xml">
]>

<project name="test" default="test" basedir=".">

<target name="setup">
</target>

&included_file;

<target name="test" depends="included-target">
<copy file="nonexistent-file" todir="/non/existent/dir"/>
<echo>test target ran.</echo>
</target>

</project>

+ 3
- 0
src/etc/testcases/core/include/including_file_task_error/included_file.xml View File

@@ -0,0 +1,3 @@
<target name="included-target">
<echo>included-target ran.</echo>
</target>

+ 8
- 0
src/etc/testcases/taskdefs/optional/xml/test.xml View File

@@ -0,0 +1,8 @@
<root>
<a>this is the first line</a>
<b><c>not indented</c></b>
<b>
<c>indented</c>
</b>
</root>

+ 8
- 0
src/etc/testcases/taskdefs/optional/xml/test.xsl View File

@@ -0,0 +1,8 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Copy every node and attributes recursively -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

+ 11
- 0
src/etc/testcases/taskdefs/optional/xslt.xml View File

@@ -31,5 +31,16 @@
</style>
</target>


<target name="testOutputProperty" depends="init">
<style in="xml/test.xml"
out="xml/out/test-out.xml"
style="xml/test.xsl">
<outputproperty name="method" value="xml"/>
<outputproperty name="standalone" value="yes"/>
<outputproperty name="encoding" value="iso8859_1"/>
<outputproperty name="indent" value="yes"/>
</style>
</target>
</project>

+ 17
- 0
src/etc/testcases/taskdefs/zip.xml View File

@@ -78,6 +78,22 @@
</zip>
</target>

<target name="testUpdateNotNecessary" depends="feather">
<zip destFile="asf-logo.gif.zip"
basedir=".."
includes="asf-logo.gif"
update="true" />
</target>

<target name="testUpdateIsNecessary" depends="feather">
<sleep seconds="5" />
<touch file="../dummyfile" />
<zip destFile="asf-logo.gif.zip"
basedir=".."
includes="asf-logo.gif,dummyfile"
update="true" />
</target>

<target name="cleanup">
<delete file="test3.zip"/>
<delete file="test4.zip"/>
@@ -88,5 +104,6 @@
<delete file="test8.zip"/>
<delete file="asf-logo.gif.zip"/>
<delete file="zipgroupfileset.zip"/>
<delete file="../dummyfile" />
</target>
</project>

+ 25
- 0
src/etc/testcases/types/selectors.xml View File

@@ -5,6 +5,8 @@
<property name="etc.dir" value=".."/>
<property name="test.dir"
value="selectortest"/>
<property name="mirror.dir"
value="selectortest2"/>

<target name="setupfiles">
<mkdir dir="${test.dir}" />
@@ -57,4 +59,27 @@
<delete dir="${test.dir}" />
</target>

<target name="mirrorfiles">
<mkdir dir="${mirror.dir}" />
<mkdir dir="${mirror.dir}/zip" />
<mkdir dir="${mirror.dir}/tar" />
<mkdir dir="${mirror.dir}/tar/gz" />
<mkdir dir="${mirror.dir}/tar/bz2" />
<touch file="${mirror.dir}/asf-logo.gif.md5"/>
<touch file="${mirror.dir}/asf-logo.gif.bz2"/>
<sleep seconds="2"/>
<touch file="${mirror.dir}/zip/asf-logo.gif.zip"/>
<sleep seconds="3"/>
<touch file="${mirror.dir}/tar/asf-logo.gif.tar"/>
<sleep seconds="2"/>
<touch file="${mirror.dir}/tar/asf-logo-huge.tar"/>
<touch file="${mirror.dir}/tar/gz/asf-logo.gif.tar.gz"/>
<touch file="${mirror.dir}/tar/bz2/asf-logo.gif.tar.bz2"/>
<touch file="${mirror.dir}/tar/bz2/asf-logo-huge.tar.bz2"/>
</target>

<target name="cleanup.mirrorfiles">
<delete dir="${mirror.dir}" />
</target>

</project>

+ 307
- 0
src/main/org/apache/tools/ant/Diagnostics.java View File

@@ -0,0 +1,307 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant;

import java.io.File;
import java.io.FilenameFilter;
import java.io.PrintStream;
import java.io.InputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;

/**
* A little diagnostic helper that output some information that may help
* in support. It should quickly give correct information about the
* jar existing in ant.home/lib and the jar versions...
*
* @since Ant 1.5
* @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
*/
public final class Diagnostics {

/** utility class */
private Diagnostics(){
}

/**
* Check if optional tasks are available. Not that it does not check
* for implementation version. Use <tt>validateVersion()</tt> for this.
* @return <tt>true</tt> if optional tasks are available.
*/
public static boolean isOptionalAvailable() {
try {
Class.forName("org.apache.tools.ant.taskdefs.optional.Test");
} catch (ClassNotFoundException e){
return false;
}
return true;
}

/**
* Check if core and optional implementation version do match.
* @throws BuildException if the implementation version of optional tasks
* does not match the core implementation version.
*/
public static void validateVersion() throws BuildException {
try {
Class optional = Class.forName("org.apache.tools.ant.taskdefs.optional.Test");
String coreVersion = getImplementationVersion(Main.class);
String optionalVersion = getImplementationVersion(optional);
if (coreVersion != null && !coreVersion.equals(optionalVersion) ){
throw new BuildException(
"Invalid implementation version between Ant core and Ant optional tasks.\n" +
" core : " + coreVersion + "\n" +
" optional: " + optionalVersion);
}
} catch (ClassNotFoundException e){
}
}

/**
* return the list of jar files existing in ANT_HOME/lib
* and that must have been picked up by Ant script.
* @return the list of jar files existing in ant.home/lib or
* <tt>null</tt> if an error occurs.
*/
public static File[] listLibraries() {
String home = System.getProperty("ant.home");
File libDir = new File(home, "lib");
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".jar");
}
};
// listFiles is JDK 1.2+ method...
String[] filenames = libDir.list(filter);
File[] files = new File[filenames.length];
for (int i = 0; i < filenames.length; i++){
files[i] = new File(libDir, filenames[i]);
}
return files;
}

/**
* main entry point for command line
* @param args command line arguments.
*/
public static void main(String[] args){
doReport(System.out);
}


/**
* Helper method to get the implementation version.
* @param clazz the class to get the information from.
* @return null if there is no package or implementation version.
* '?.?' for JDK 1.0 or 1.1.
*/
private static String getImplementationVersion(Class clazz){
try {
// Package pkg = clazz.getPackage();
Method method = Class.class.getMethod("getPackage", new Class[0]);
Object pkg = method.invoke(clazz, null);
if (pkg != null) {
// pkg.getImplementationVersion();
method = pkg.getClass().getMethod("getImplementationVersion", new Class[0]);
Object version = method.invoke(pkg, null);
return (String)version;
}
} catch (Exception e){
// JDK < 1.2 should land here because the methods above don't exist.
return "?.?";
}
return null;
}

/**
* Print a report to the given stream.
* @param out the stream to print the report to.
*/
public static void doReport(PrintStream out){
out.println("------- Ant diagnostics report -------");
out.println(Main.getAntVersion());
out.println();
out.println("-------------------------------------------");
out.println(" Implementation Version (JDK1.2+ only)");
out.println("-------------------------------------------");
out.println("core tasks : " + getImplementationVersion(Main.class));

Class optional = null;
try {
optional = Class.forName(
"org.apache.tools.ant.taskdefs.optional.Test");
out.println("optional tasks : " + getImplementationVersion(optional));
} catch (ClassNotFoundException e){
out.println("optional tasks : not available");
}

out.println();
out.println("-------------------------------------------");
out.println(" ANT_HOME/lib jar listing");
out.println("-------------------------------------------");
doReportLibraries(out);

out.println();
out.println("-------------------------------------------");
out.println(" Tasks availability");
out.println("-------------------------------------------");
doReportTasksAvailability(out);

out.println();
out.println("-------------------------------------------");
out.println(" org.apache.env.Which diagnostics");
out.println("-------------------------------------------");
doReportWhich(out);

out.println();
out.println("-------------------------------------------");
out.println(" System properties");
out.println("-------------------------------------------");
doReportSystemProperties(out);

out.println();
}

/**
* Report a listing of system properties existing in the current vm.
* @param out the stream to print the properties to.
*/
private static void doReportSystemProperties(PrintStream out){
for( Enumeration keys = System.getProperties().keys();
keys.hasMoreElements(); ){
String key = (String)keys.nextElement();
out.println(key + " : " + System.getProperty(key));
}
}


/**
* Report the content of ANT_HOME/lib directory
* @param out the stream to print the content to
*/
private static void doReportLibraries(PrintStream out){
File[] libs = listLibraries();
for (int i = 0; i < libs.length; i++){
out.println(libs[i].getName()
+ " (" + libs[i].length() + " bytes)");
}
}


/**
* Call org.apache.env.Which if available
* @param out the stream to print the content to.
*/
private static void doReportWhich(PrintStream out){
Throwable error = null;
try {
Class which = Class.forName("org.apache.env.Which");
Method method = which.getMethod("main", new Class[]{ String[].class });
method.invoke(null, new Object[]{new String[]{}});
} catch (ClassNotFoundException e) {
out.println("Not available.");
out.println("Download it at http://xml.apache.org/commons/");
} catch (InvocationTargetException e) {
error = e.getTargetException() == null ? e : e.getTargetException();
} catch (Exception e) {
error = e;
}
// report error if something weird happens...this is diagnostic.
if (error != null) {
out.println("Error while running org.apache.env.Which");
error.printStackTrace();
}
}

/**
* Create a report about non-available tasks that are defined in the
* mapping but could not be found via lookup. It might generally happen
* because Ant requires multiple libraries to compile and one of them
* was missing when compiling Ant.
* @param out the stream to print the tasks report to
* @param is the stream defining the mapping task name/classname, can be
* <tt>null</tt> for a missing stream (ie mapping).
*/
private static void doReportTasksAvailability(PrintStream out){
InputStream is = Main.class.getResourceAsStream("/org/apache/tools/ant/taskdefs/defaults.properties");
if (is == null) {
out.println("None available");
} else {
Properties props = new Properties();
try {
props.load(is);
for (Enumeration keys = props.keys(); keys.hasMoreElements();){
String key = (String)keys.nextElement();
String classname = props.getProperty(key);
try {
Class.forName(classname);
props.remove(key);
} catch (ClassNotFoundException e){
out.println(key + " : Not Available");
}
}
if (props.size() == 0){
out.println("All defined tasks are available");
}
} catch (IOException e){
out.println(e.getMessage());
}
}
}

}

+ 3
- 1
src/main/org/apache/tools/ant/DirectoryScanner.java View File

@@ -169,7 +169,9 @@ public class DirectoryScanner implements FileScanner, SelectorScanner {
"**/.cvsignore",
"**/SCCS",
"**/SCCS/**",
"**/vssver.scc"
"**/vssver.scc",
"**/.svn",
"**/.svn/**"
};

/** The base directory to be scanned. */


+ 7
- 2
src/main/org/apache/tools/ant/Main.java View File

@@ -176,6 +176,7 @@ public class Main {
Main m = null;

try {
Diagnostics.validateVersion();
m = new Main(args);
} catch (Throwable exc) {
printMessage(exc);
@@ -264,6 +265,9 @@ public class Main {
} else if (arg.equals("-version")) {
printVersion();
return;
} else if (arg.equals("-diagnostics")){
Diagnostics.doReport(System.out);
return;
} else if (arg.equals("-quiet") || arg.equals("-q")) {
msgOutputLevel = Project.MSG_WARN;
} else if (arg.equals("-verbose") || arg.equals("-v")) {
@@ -589,7 +593,7 @@ public class Main {
}

project.setUserProperty("ant.file",
buildFile.getAbsolutePath());
buildFile.getAbsolutePath());

ProjectHelper.configureProject(project, buildFile);

@@ -732,6 +736,8 @@ public class Main {
msg.append(" -help print this message" + lSep);
msg.append(" -projecthelp print project help information" + lSep);
msg.append(" -version print the version information and exit" + lSep);
msg.append(" -diagnostics print information that might be helpful to" + lSep);
msg.append(" diagnose or report problems." + lSep);
msg.append(" -quiet, -q be extra quiet" + lSep);
msg.append(" -verbose, -v be extra verbose" + lSep);
msg.append(" -debug print debugging information" + lSep);
@@ -785,7 +791,6 @@ public class Main {
props.load(in);
in.close();

String lSep = System.getProperty("line.separator");
StringBuffer msg = new StringBuffer();
msg.append("Apache Ant version ");
msg.append(props.getProperty("VERSION"));


+ 5
- 3
src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java View File

@@ -155,7 +155,7 @@ public class ProjectHelperImpl extends ProjectHelper {
parser.parse(inputSource);
} catch (SAXParseException exc) {
Location location =
new Location(buildFile.toString(), exc.getLineNumber(),
new Location(exc.getSystemId(), exc.getLineNumber(),
exc.getColumnNumber());

Throwable t = exc.getException();
@@ -452,7 +452,9 @@ public class ProjectHelperImpl extends ProjectHelper {
}

if (def == null) {
helperImpl.project.setDefaultTarget("main");
throw new SAXParseException("The default attribute of project "
+ "is required",
helperImpl.locator);
} else {
helperImpl.project.setDefaultTarget(def);
}
@@ -791,7 +793,7 @@ public class ProjectHelperImpl extends ProjectHelper {
task.setTaskName(tag);
}

task.setLocation(new Location(helperImpl.buildFile.toString(), helperImpl.locator.getLineNumber(),
task.setLocation(new Location(helperImpl.locator.getSystemId(), helperImpl.locator.getLineNumber(),
helperImpl.locator.getColumnNumber()));
helperImpl.configureId(task, attrs);



+ 6
- 3
src/main/org/apache/tools/ant/taskdefs/Ant.java View File

@@ -72,7 +72,7 @@ import java.util.Hashtable;
import java.util.Enumeration;

/**
* Call Ant in a sub-project.
* Build a sub-project.
*
* <pre>
* &lt;target name=&quot;foo&quot; depends=&quot;init&quot;&gt;
@@ -329,7 +329,10 @@ public class Ant extends Task {

if (dir != null) {
newProject.setBaseDir(dir);
newProject.setUserProperty("basedir" , dir.getAbsolutePath());
if (savedDir != null) { // has been set explicitly
newProject.setInheritedProperty("basedir" ,
dir.getAbsolutePath());
}
} else {
dir = project.getBaseDir();
}
@@ -487,7 +490,7 @@ public class Ant extends Task {
}

/**
* The directory to use as a basedir for the new Ant project.
* The directory to use as a base directory for the new Ant project.
* Defaults to the current project's basedir, unless inheritall
* has been set to false, in which case it doesn't have a default
* value. This will override the basedir setting of the called project.


+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/Basename.java View File

@@ -59,8 +59,8 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

/**
* Task to determine the basename of a specified file, optionally minus a
* specified suffix.
* Sets a property to the base name of a specified file, optionally minus a
* suffix.
*
* This task can accept the following attributes:
* <ul>


+ 2
- 1
src/main/org/apache/tools/ant/taskdefs/BuildNumber.java View File

@@ -63,7 +63,8 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.util.FileUtils;

/**
* This is a basic task that can be used to track build numbers. It will first
* Read, increment, and write a build number in a file
* It will first
* attempt to read a build number from a file, then set the property
* "build.number" to the value that was read in (or 0 if no such value). Then
* it will increment the build number by one and write it back out into the


+ 1
- 3
src/main/org/apache/tools/ant/taskdefs/CVSPass.java View File

@@ -67,9 +67,7 @@ import java.io.FileWriter;
import java.io.IOException;

/**
* CVSLogin
*
* Adds an new entry to a CVS password file
* Adds an new entry to a CVS password file.
*
* @author <a href="jeff@custommonkey.org">Jeff Martin</a>
* @version $Revision$


+ 0
- 1
src/main/org/apache/tools/ant/taskdefs/CallTarget.java View File

@@ -136,7 +136,6 @@ public class CallTarget extends Task {
location);
}
callee.setDir(getProject().getBaseDir());
callee.setAntfile(getProject().getProperty("ant.file"));
callee.setTarget(subTarget);
callee.setInheritAll(inheritAll);


+ 7
- 10
src/main/org/apache/tools/ant/taskdefs/Chmod.java View File

@@ -68,7 +68,7 @@ import org.apache.tools.ant.types.PatternSet;
* Chmod equivalent for unix-like environments.
*
* @author costin@eng.sun.com
* @author Mariusz Nowostawski (Marni)
* @author Mariusz Nowostawski (Marni)
* <a href="mailto:mnowostawski@infoscience.otago.ac.nz">mnowostawski@infoscience.otago.ac.nz</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*
@@ -233,29 +233,26 @@ public class Chmod extends ExecuteOn {
}

/**
* Not supported.
* @param e
* @ant.attribute ignore="true"
*/
public void setExecutable(String e) {
throw new BuildException(taskType
throw new BuildException(taskType
+ " doesn\'t support the executable attribute", location);
}

/**
* Not supported.
* @param cmdl
* @ant.attribute ignore="true"
*/
public void setCommand(Commandline cmdl) {
throw new BuildException(taskType
throw new BuildException(taskType
+ " doesn\'t support the command attribute", location);
}

/**
* Not supported.
* @param skip
* @ant.attribute ignore="true"
*/
public void setSkipEmptyFilesets(boolean skip) {
throw new BuildException(taskType
throw new BuildException(taskType
+ " doesn\'t support the skipemptyfileset attribute", location);
}



+ 18
- 18
src/main/org/apache/tools/ant/taskdefs/Copy.java View File

@@ -76,7 +76,7 @@ import java.util.Hashtable;
import java.util.Enumeration;

/**
* A consolidated copy task. Copies a file or directory to a new file
* Copies a file or directory to a new file
* or directory. Files are only copied if the source file is newer
* than the destination file, or when the destination file does not
* exist. It is possible to explicitly overwrite existing files.</p>
@@ -85,7 +85,7 @@ import java.util.Enumeration;
* document, the following mailing list discussions, and the
* copyfile/copydir tasks.</p>
*
* @author Glenn McAllister
* @author Glenn McAllister
* <a href="mailto:glennm@ca.ibm.com">glennm@ca.ibm.com</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @author <A href="gholam@xtra.co.nz">Michael McCallum</A>
@@ -122,7 +122,7 @@ public class Copy extends Task {
private String encoding = null;

/**
* Copy task constructor.
* Copy task constructor.
*/
public Copy() {
fileUtils = FileUtils.newFileUtils();
@@ -316,12 +316,12 @@ public class Copy extends Task {
// will be removed in validateAttributes
savedFileSet = (FileSet) filesets.elementAt(0);
}
// make sure we don't have an illegal set of options
validateAttributes();

try {
// deal with the single file
if (file != null) {
if (file.exists()) {
@@ -331,10 +331,10 @@ public class Copy extends Task {

if (forceOverwrite ||
(file.lastModified() > destFile.lastModified())) {
fileCopyMap.put(file.getAbsolutePath(),
fileCopyMap.put(file.getAbsolutePath(),
destFile.getAbsolutePath());
} else {
log(file + " omitted as " + destFile
log(file + " omitted as " + destFile
+ " is up to date.", Project.MSG_VERBOSE);
}
} else {
@@ -353,7 +353,7 @@ public class Copy extends Task {
FileSet fs = (FileSet) filesets.elementAt(i);
DirectoryScanner ds = fs.getDirectoryScanner(project);
File fromDir = fs.getDir(project);
String[] srcFiles = ds.getIncludedFiles();
String[] srcDirs = ds.getIncludedDirectories();
boolean isEverythingIncluded = ds.isEverythingIncluded();
@@ -363,7 +363,7 @@ public class Copy extends Task {
}
scan(fromDir, destDir, srcFiles, srcDirs);
}
// do all the copy operations now...
doFileOperations();
} finally {
@@ -447,7 +447,7 @@ public class Copy extends Task {
* Compares source files to destination files to see if they should be
* copied.
*/
protected void scan(File fromDir, File toDir, String[] files,
protected void scan(File fromDir, File toDir, String[] files,
String[] dirs) {
FileNameMapper mapper = null;
if (mapperElement != null) {
@@ -496,8 +496,8 @@ public class Copy extends Task {
*/
protected void doFileOperations() {
if (fileCopyMap.size() > 0) {
log("Copying " + fileCopyMap.size()
+ " file" + (fileCopyMap.size() == 1 ? "" : "s")
log("Copying " + fileCopyMap.size()
+ " file" + (fileCopyMap.size() == 1 ? "" : "s")
+ " to " + destDir.getAbsolutePath());

Enumeration e = fileCopyMap.keys();
@@ -513,20 +513,20 @@ public class Copy extends Task {
try {
log("Copying " + fromFile + " to " + toFile, verbosity);

FilterSetCollection executionFilters =
FilterSetCollection executionFilters =
new FilterSetCollection();
if (filtering) {
executionFilters
.addFilterSet(project.getGlobalFilterSet());
}
for (Enumeration filterEnum = filterSets.elements();
for (Enumeration filterEnum = filterSets.elements();
filterEnum.hasMoreElements();) {
executionFilters
.addFilterSet((FilterSet) filterEnum.nextElement());
}
fileUtils.copyFile(fromFile, toFile, executionFilters,
filterChains, forceOverwrite,
preserveLastModified, encoding,
fileUtils.copyFile(fromFile, toFile, executionFilters,
filterChains, forceOverwrite,
preserveLastModified, encoding,
project);
} catch (IOException ioe) {
String msg = "Failed to copy " + fromFile + " to " + toFile
@@ -543,7 +543,7 @@ public class Copy extends Task {
File d = new File((String) e.nextElement());
if (!d.exists()) {
if (!d.mkdirs()) {
log("Unable to create directory "
log("Unable to create directory "
+ d.getAbsolutePath(), Project.MSG_ERR);
} else {
count++;


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/DependSet.java View File

@@ -66,7 +66,7 @@ import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.FileList;

/**
* A Task to record explicit dependencies. If any of the target files
* Examines and removes out of date target files. If any of the target files
* are out of date with respect to any of the source files, all target
* files are removed. This is useful where dependencies cannot be
* computed (for example, dynamically interpreted parameters or files


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/Dirname.java View File

@@ -60,7 +60,7 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

/**
* Task to determine the directory name of the specified file.
* Determines the directory name of the specified file.
*
* This task can accept the following attributes:
* <ul>


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/Echo.java View File

@@ -63,7 +63,7 @@ import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
/**
* Echo
* Writes a message to the Ant logging facilities.
*
* @author costin@dnt.ro
*


+ 12
- 13
src/main/org/apache/tools/ant/taskdefs/ExecTask.java View File

@@ -99,9 +99,9 @@ public class ExecTask extends Task {
private boolean failIfExecFails = true;
private boolean append = false;

/**
/**
* Controls whether the VM (1.3 and above) is used to execute the
* command
* command
*/
private boolean vmLauncher = true;

@@ -147,8 +147,7 @@ public class ExecTask extends Task {
}

/**
* Deprecated, use executable instead.
* The full commandline to execute, executable + arguments.
* @ant.attribute ignore="true"
*/
public void setCommand(Commandline cmdl) {
log("The command attribute is deprecated. " +
@@ -209,9 +208,9 @@ public class ExecTask extends Task {
public void setResultProperty(String resultProperty) {
this.resultProperty = resultProperty;
}
/**
* helper method to set result property to the
* helper method to set result property to the
* passed in value if appropriate
*/
protected void maybeSetResultPropertyValue(int result) {
@@ -220,16 +219,16 @@ public class ExecTask extends Task {
project.setNewProperty(resultProperty, res);
}
}
/**
* Stop the build if program cannot be started. Defaults to true.
*
* @since Ant 1.5
* @since Ant 1.5
*/
public void setFailIfExecutionFails(boolean flag) {
failIfExecFails = flag;
}
/**
* Whether output should be appended to or overwrite an existing file.
* Defaults to false.
@@ -281,7 +280,7 @@ public class ExecTask extends Task {
log("Current OS is " + myos, Project.MSG_VERBOSE);
if ((os != null) && (os.indexOf(myos) < 0)){
// this command will be executed only on the specified OS
log("This OS, " + myos
log("This OS, " + myos
+ " was not found in the specified list of valid OSes: " + os,
Project.MSG_VERBOSE);
return false;
@@ -330,7 +329,7 @@ public class ExecTask extends Task {
err = exe.execute();
//test for and handle a forced process death
if (exe.killedProcess()) {
log("Timeout: killed the sub-process", Project.MSG_WARN);
log("Timeout: killed the sub-process", Project.MSG_WARN);
}
maybeSetResultPropertyValue(err);
if (err != 0) {
@@ -390,10 +389,10 @@ public class ExecTask extends Task {
log("Output redirected to " + out, Project.MSG_VERBOSE);
return new PumpStreamHandler(fos);
} catch (FileNotFoundException fne) {
throw new BuildException("Cannot write to " + out, fne,
throw new BuildException("Cannot write to " + out, fne,
location);
} catch (IOException ioe) {
throw new BuildException("Cannot write to " + out, ioe,
throw new BuildException("Cannot write to " + out, ioe,
location);
}
} else if (outputprop != null) {


+ 4
- 0
src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java View File

@@ -184,6 +184,10 @@ public class ExecuteOn extends ExecTask {
return mapperElement;
}

/**
* @todo using taskName here is brittle, as a user could override it.
* this should probably be modified to use the classname instead.
*/
protected void checkConfiguration() {
if ("execon".equals(taskName)) {
log("!! execon is deprecated. Use apply instead. !!");


+ 5
- 5
src/main/org/apache/tools/ant/taskdefs/Exit.java View File

@@ -1,7 +1,7 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -59,7 +59,7 @@ import org.apache.tools.ant.BuildException;


/**
* Exit the active build, giving an additional message
* Exits the active build, giving an additional message
* if available.
*
* @author <a href="mailto:nico@seessle.de">Nico Seessle</a>
@@ -68,7 +68,7 @@ import org.apache.tools.ant.BuildException;
*
* @ant.task name="fail" category="control"
*/
public class Exit extends Task {
public class Exit extends Task {
private String message;
private String ifCondition, unlessCondition;

@@ -100,7 +100,7 @@ public class Exit extends Task {

public void execute() throws BuildException {
if (testIfCondition() && testUnlessCondition()) {
if (message != null && message.length() > 0) {
if (message != null && message.length() > 0) {
throw new BuildException(message);
} else {
throw new BuildException("No message");
@@ -122,7 +122,7 @@ public class Exit extends Task {
if (ifCondition == null || "".equals(ifCondition)) {
return true;
}
return project.getProperty(ifCondition) != null;
}



+ 9
- 9
src/main/org/apache/tools/ant/taskdefs/Filter.java View File

@@ -61,11 +61,11 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;

/**
* Sets a token filter that is used by the file copy methods
* of the project to do token substitution, or sets mutiple tokens by
* Sets a token filter that is used by the file copy tasks
* to do token substitution. Sets mutiple tokens by
* reading these from a file.
*
* @author Stefano Mazzocchi
* @author Stefano Mazzocchi
* <a href="mailto:stefano@apache.org">stefano@apache.org</a>
* @author Gero Vermaas <a href="mailto:gero@xs4all.nl">gero@xs4all.nl</a>
* @author <A href="gholam@xtra.co.nz">Michael McCallum</A>
@@ -107,26 +107,26 @@ public class Filter extends Task {
}

public void execute() throws BuildException {
boolean isFiltersFromFile =
boolean isFiltersFromFile =
filtersFile != null && token == null && value == null;
boolean isSingleFilter =
boolean isSingleFilter =
filtersFile == null && token != null && value != null;
if (!isFiltersFromFile && !isSingleFilter) {
throw new BuildException("both token and value parameters, or "
+ "only a filtersFile parameter is "
+ "required", location);
}
if (isSingleFilter) {
project.getGlobalFilterSet().addFilter(token, value);
}
if (isFiltersFromFile) {
readFilters();
}
}
protected void readFilters() throws BuildException {
log("Reading filters from " + filtersFile, Project.MSG_VERBOSE);
project.getGlobalFilterSet().readFiltersFromFile(filtersFile);


+ 4
- 4
src/main/org/apache/tools/ant/taskdefs/FixCRLF.java View File

@@ -449,7 +449,7 @@ public class FixCRLF extends MatchingTask {
break;

case IN_MULTI_COMMENT:
endComment
endComment
= lineString.indexOf("*/", line.getNext());
if (endComment >= 0) {
// End of multiLineComment on this line
@@ -486,7 +486,7 @@ public class FixCRLF extends MatchingTask {
if (line.getNextCharInc() == '\t') {
line.setColumn(line.getColumn() +
tablength -
(line.getColumn()
(line.getColumn()
% tablength));
} else {
line.incColumn();
@@ -495,7 +495,7 @@ public class FixCRLF extends MatchingTask {

// Now output the substring
try {
outWriter.write(line.substring(begin,
outWriter.write(line.substring(begin,
line.getNext()));
} catch (IOException e) {
throw new BuildException(e);
@@ -547,7 +547,7 @@ public class FixCRLF extends MatchingTask {
lines.close();
lines = null;
} catch (IOException e) {
throw new BuildException("Unable to close source file "
throw new BuildException("Unable to close source file "
+ srcFile);
}



+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/Get.java View File

@@ -69,7 +69,7 @@ import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.JavaEnvUtils;

/**
* Get a particular file from a URL source.
* Gets a particular file from a URL source.
* Options include verbose reporting, timestamp based fetches and controlling
* actions on failures. NB: access through a firewall only works if the whole
* Java runtime is correctly configured.


+ 13
- 20
src/main/org/apache/tools/ant/taskdefs/JDBCTask.java View File

@@ -83,7 +83,7 @@ import java.sql.Statement;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.JDBCTask;

public class SQLExampleTask extends JDBCTask {
public class SQLExampleTask extends JDBCTask {

private String tableName;

@@ -93,7 +93,7 @@ public class SQLExampleTask extends JDBCTask {
try {
if (tableName == null ) {
throw new BuildException("TableName must be specified",location);
}
}
String sql = "SELECT * FROM "+tableName;
stmt= conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
@@ -101,7 +101,7 @@ public class SQLExampleTask extends JDBCTask {
log(rs.getObject(1).toString());
}
} catch (SQLException e) {
} finally {
if (stmt != null) {
try {stmt.close();}catch (SQLException ingore){}
@@ -117,7 +117,7 @@ public class SQLExampleTask extends JDBCTask {

}

</pre></code>


@@ -182,7 +182,7 @@ public abstract class JDBCTask extends Task {
private String version = null;

/**
* Sets the classpath.
* Sets the classpath for loading the driver.
* @param classpath The classpath to set
*/
public void setClasspath(Path classpath) {
@@ -200,7 +200,7 @@ public abstract class JDBCTask extends Task {
}

/**
* Add the classpath for loading the driver;
* Add a path to the classpath for loading the driver.
*/
public Path createClasspath() {
if (this.classpath == null) {
@@ -210,7 +210,7 @@ public abstract class JDBCTask extends Task {
}

/**
* Set the classpath for loading the driver
* Set the classpath for loading the driver
* using the classpath reference.
*/
public void setClasspathRef(Reference r) {
@@ -218,7 +218,7 @@ public abstract class JDBCTask extends Task {
}

/**
* Class name of the jdbc driver; required.
* Class name of the JDBC driver; required.
* @param driver The driver to set
*/
public void setDriver(String driver) {
@@ -226,20 +226,13 @@ public abstract class JDBCTask extends Task {
}

/**
* Sets the database connection url; required.
* Sets the database connection URL; required.
* @param url The url to set
*/
public void setUrl(String url) {
this.url = url;
}

/**
* Set the user name for the connection; required.
*/
public void setUserid(String userId) {
this.userId = userId;
}

/**
* Sets the password; required.
* @param password The password to set
@@ -258,7 +251,7 @@ public abstract class JDBCTask extends Task {
}

/**
* Execute task only if the lower case product name
* Execute task only if the lower case product name
* of the DB matches this
* @param rdbms The rdbms to set
*/
@@ -267,7 +260,7 @@ public abstract class JDBCTask extends Task {
}

/**
* Sets the version string, execute task only if
* Sets the version string, execute task only if
* rdbms version match; optional.
* @param version The version to set
*/
@@ -460,10 +453,10 @@ public abstract class JDBCTask extends Task {
}

/**
* Sets the userId.
* Set the user name for the connection; required.
* @param userId The userId to set
*/
public void setUserId(String userId) {
public void setUserid(String userId) {
this.userId = userId;
}



+ 10
- 4
src/main/org/apache/tools/ant/taskdefs/Jar.java View File

@@ -137,9 +137,7 @@ public class Jar extends Zip {
}

/**
* Not supported.
*
* @param we
* @ant.attribute ignore="true"
*/
public void setWhenempty(WhenEmpty we) {
log("JARs are never empty, they contain at least a manifest file",
@@ -246,10 +244,12 @@ public class Jar extends Zip {
*
* @param config setting for found manifest behavior.
*/
/*
public void setFilesetmanifest(FilesetManifestConfig config) {
filesetManifestConfig = config;
mergeManifestsMain = "merge".equals(config.getValue());
}
*/

/**
* Adds a zipfileset to include in the META-INF directory.
@@ -439,7 +439,13 @@ public class Jar extends Zip {
Project.MSG_VERBOSE);

try {
Manifest newManifest = getManifest(new InputStreamReader(is));
Manifest newManifest = null;
if (is != null) {
newManifest = getManifest(new InputStreamReader(is));
} else {
newManifest = getManifest(file);
}

if (filesetManifest == null) {
filesetManifest = newManifest;
} else {


+ 2
- 1
src/main/org/apache/tools/ant/taskdefs/Java.java View File

@@ -72,7 +72,7 @@ import java.io.IOException;
import java.util.Vector;

/**
* This task acts as a loader for java applications but allows to use
* Launcher for Java applications. Allows use of
* the same JVM for the called application thus resulting in much
* faster operation.
*
@@ -231,6 +231,7 @@ public class Java extends Task {
/**
* Deprecated: use nested arg instead.
* Set the command line arguments for the class.
* @ant.attribute ignore="true"
*/
public void setArgs(String s) {
log("The args attribute is deprecated. " +


+ 17
- 18
src/main/org/apache/tools/ant/taskdefs/Javac.java View File

@@ -97,7 +97,7 @@ import java.io.File;
* compile decision based on timestamp.
*
* @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
* @author Robin Green
* @author Robin Green
* <a href="mailto:greenrd@hotmail.com">greenrd@hotmail.com</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
@@ -198,7 +198,7 @@ public class Javac extends MatchingTask {
*
* If you use this attribute together with jikes, you must
* make sure that your version of jikes supports the -source switch.
* Legal values are 1.3 and 1.4 by default, no -source argument
* Legal values are 1.3 and 1.4 - by default, no -source argument
* will be used at all.
*
* @param v Value to assign to source.
@@ -220,7 +220,7 @@ public class Javac extends MatchingTask {
}

/**
* Recreate src
* Recreate src.
*
* @return a nested src element.
*/
@@ -296,7 +296,7 @@ public class Javac extends MatchingTask {

/**
* Set the classpath to be used for this compilation.
*
*
* @param classpath an Ant Path object containing the compilation classpath.
*/
public void setClasspath(Path classpath) {
@@ -417,8 +417,7 @@ public class Javac extends MatchingTask {
}

/**
* Proceed if compilation fails, but use
* failonerror instead.
* @ant.attribute ignore="true"
*/
public void setProceed(boolean proceed) {
failOnError = !proceed;
@@ -654,7 +653,7 @@ public class Javac extends MatchingTask {
facade.setImplementation(chosen);
}
}

/**
* Executes the task.
@@ -669,8 +668,8 @@ public class Javac extends MatchingTask {
for (int i = 0; i < list.length; i++) {
File srcDir = project.resolveFile(list[i]);
if (!srcDir.exists()) {
throw new BuildException("srcdir \""
+ srcDir.getPath()
throw new BuildException("srcdir \""
+ srcDir.getPath()
+ "\" does not exist!", location);
}

@@ -748,9 +747,9 @@ public class Javac extends MatchingTask {
* <p>If fork has been set to true, the result will be extJavac
* and not classic or java1.2 - no matter what the compiler
* attribute looks like.</p>
*
*
* @see #getCompilerVersion
*
*
* @since Ant 1.5
*/
public String getCompiler() {
@@ -776,7 +775,7 @@ public class Javac extends MatchingTask {
*
* <p>This method does not take the fork attribute into
* account.</p>
*
*
* @see #getCompiler
*
* @since Ant 1.5
@@ -794,17 +793,17 @@ public class Javac extends MatchingTask {
*/
protected void checkParameters() throws BuildException {
if (src == null) {
throw new BuildException("srcdir attribute must be set!",
throw new BuildException("srcdir attribute must be set!",
location);
}
if (src.size() == 0) {
throw new BuildException("srcdir attribute must be set!",
throw new BuildException("srcdir attribute must be set!",
location);
}

if (destDir != null && !destDir.isDirectory()) {
throw new BuildException("destination directory \""
+ destDir
throw new BuildException("destination directory \""
+ destDir
+ "\" does not exist "
+ "or is not a directory", location);
}
@@ -831,7 +830,7 @@ public class Javac extends MatchingTask {
}
}

CompilerAdapter adapter =
CompilerAdapter adapter =
CompilerAdapterFactory.getCompiler(compilerImpl, this);

// now we need to populate the compiler adapter
@@ -853,7 +852,7 @@ public class Javac extends MatchingTask {
* filter command line attributes based on the current
* implementation.
*/
public class ImplementationSpecificArgument extends
public class ImplementationSpecificArgument extends
org.apache.tools.ant.util.facade.ImplementationSpecificArgument {

public void setCompiler(String impl) {


+ 0
- 1
src/main/org/apache/tools/ant/taskdefs/Javadoc.java View File

@@ -1654,7 +1654,6 @@ public class Javadoc extends Task {
}
}


if (la.isLinkOffline()) {
File packageListLocation = la.getPackagelistLoc();
if (packageListLocation == null) {


+ 12
- 128
src/main/org/apache/tools/ant/taskdefs/Manifest.java View File

@@ -58,9 +58,6 @@ import java.util.Vector;
import java.util.Hashtable;
import java.util.Enumeration;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -70,16 +67,11 @@ import java.io.StringWriter;
import java.io.UnsupportedEncodingException;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.EnumeratedAttribute;
import org.apache.tools.ant.util.CollectionUtils;

/**
* Holds the data of a jar manifest.
*
* Creates a manifest file for inclusion in a JAR.
* This task can be used to write a Manifest file, optionally
* replacing or updating an existing file.
* Manifests are processed according to the
* {@link <a href="http://java.sun.com/j2se/1.4/docs/guide/jar/jar.html">Jar
* file specification.</a>}.
@@ -89,16 +81,13 @@ import org.apache.tools.ant.util.CollectionUtils;
* greater than 72 bytes being wrapped and continued on the next
* line. If an application can not handle the continuation mechanism, it
* is a defect in the application, not this task.

* @author Conor MacNeill
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @author <a href="mailto:j_a_fernandez@yahoo.com">Jose Alberto Fernandez</a>
*
* @since Ant 1.4
*
* @ant.task category="java"
*/
public class Manifest extends Task {
public class Manifest {
/** The standard manifest version header */
public static final String ATTRIBUTE_MANIFEST_VERSION
= "Manifest-Version";
@@ -131,20 +120,6 @@ public class Manifest extends Task {
/** The End-Of-Line marker in manifests */
public static final String EOL = "\r\n";

/**
* Helper class for Manifest's mode attribute.
*/
public static class Mode extends EnumeratedAttribute {
/**
* Get Allowed values for the mode attribute.
*
* @return a String array of the allowed values.
*/
public String[] getValues() {
return new String[] {"update", "replace"};
}
}

/**
* An attribute for the manifest.
* Those attributes that are not nested into a section will be added to the "Main" section.
@@ -704,7 +679,7 @@ public class Manifest extends Task {

Section rhsSection = (Section) rhs;

return attributes.equals(rhsSection.attributes);
return CollectionUtils.equals(attributes, rhsSection.attributes);
}
}

@@ -721,16 +696,6 @@ public class Manifest extends Task {
/** Index of sections - used to retain order of sections in manifest */
private Vector sectionIndex = new Vector();

/**
* The file to which the manifest should be written when used as a task
*/
private File manifestFile;

/**
* The mode with which the manifest file is written
*/
private Mode mode;

/**
* Construct a manifest from Ant's default manifest file.
*
@@ -760,8 +725,6 @@ public class Manifest extends Task {

/** Construct an empty manifest */
public Manifest() {
mode = new Mode();
mode.setValue("replace");
manifestVersion = null;
}

@@ -843,7 +806,14 @@ public class Manifest extends Task {
*/
public void addConfiguredAttribute(Attribute attribute)
throws ManifestException {
mainSection.addConfiguredAttribute(attribute);
if (attribute.getKey() == null || attribute.getValue() == null) {
throw new BuildException("Attributes must have name and value");
}
if (attribute.getKey().equalsIgnoreCase(ATTRIBUTE_MANIFEST_VERSION)) {
manifestVersion = attribute.getValue();
} else {
mainSection.addConfiguredAttribute(attribute);
}
}

/**
@@ -1017,24 +987,7 @@ public class Manifest extends Task {
return false;
}

return sections.equals(rhsManifest.sections);
}

/**
* The name of the manifest file to create/update.
* Required if used as a task.
* @param f the Manifest file to be written
*/
public void setFile(File f) {
manifestFile = f;
}

/**
* Update policy: either "update" or "replace"; default is "replace".
* @param m the mode value - update or replace.
*/
public void setMode(Mode m) {
mode = m;
return CollectionUtils.equals(sections, rhsManifest.sections);
}

/**
@@ -1074,73 +1027,4 @@ public class Manifest extends Task {
public Enumeration getSectionNames() {
return sectionIndex.elements();
}

/**
* Create or update the Manifest when used as a task.
*
* @throws BuildException if the manifest cannot be written.
*/
public void execute() throws BuildException {
if (manifestFile == null) {
throw new BuildException("the file attribute is required");
}

Manifest toWrite = getDefaultManifest();
Manifest current = null;
BuildException error = null;

if (manifestFile.exists()) {
FileReader f = null;
try {
f = new FileReader(manifestFile);
current = new Manifest(f);
} catch (ManifestException m) {
error = new BuildException("Existing manifest " + manifestFile
+ " is invalid", m, location);
} catch (IOException e) {
error = new BuildException("Failed to read " + manifestFile,
e, location);
} finally {
if (f != null) {
try {
f.close();
} catch (IOException e) {}
}
}
}

try {
if (mode.getValue().equals("update") && manifestFile.exists()) {
if (current != null) {
toWrite.merge(current);
} else if (error != null) {
throw error;
}
}

toWrite.merge(this);
} catch (ManifestException m) {
throw new BuildException("Manifest is invalid", m, location);
}

if (toWrite.equals(current)) {
log("Manifest has not changed, do not recreate",
Project.MSG_VERBOSE);
return;
}

PrintWriter w = null;
try {
w = new PrintWriter(new FileWriter(manifestFile));
toWrite.write(w);
} catch (IOException e) {
throw new BuildException("Failed to write " + manifestFile,
e, location);
} finally {
if (w != null) {
w.close();
}
}
}

}

+ 226
- 0
src/main/org/apache/tools/ant/taskdefs/ManifestTask.java View File

@@ -0,0 +1,226 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/

package org.apache.tools.ant.taskdefs;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.EnumeratedAttribute;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

/**
* Creates a manifest file for inclusion in a JAR, Ant task wrapper
* around {@link Manifest Manifest}. This task can be used to write a
* Manifest file, optionally replacing or updating an existing file.
*
* @author Conor MacNeill
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @author <a href="mailto:j_a_fernandez@yahoo.com">Jose Alberto Fernandez</a>
*
* @since Ant 1.5
*
* @ant.task category="java"
*/
public class ManifestTask extends Task {

/**
* Holds the real data.
*/
private Manifest nestedManifest = new Manifest();

/**
* The file to which the manifest should be written when used as a task
*/
private File manifestFile;

/**
* The mode with which the manifest file is written
*/
private Mode mode;

/**
* Helper class for Manifest's mode attribute.
*/
public static class Mode extends EnumeratedAttribute {
/**
* Get Allowed values for the mode attribute.
*
* @return a String array of the allowed values.
*/
public String[] getValues() {
return new String[] {"update", "replace"};
}
}

public ManifestTask() {
mode = new Mode();
mode.setValue("replace");
}

/**
* Add a section to the manifest
*
* @param section the manifest section to be added
*
* @exception ManifestException if the secti0on is not valid.
*/
public void addConfiguredSection(Manifest.Section section)
throws ManifestException {
nestedManifest.addConfiguredSection(section);
}

/**
* Add an attribute to the manifest - it is added to the main section.
*
* @param attribute the attribute to be added.
*
* @exception ManifestException if the attribute is not valid.
*/
public void addConfiguredAttribute(Manifest.Attribute attribute)
throws ManifestException {
nestedManifest.addConfiguredAttribute(attribute);
}

/**
* The name of the manifest file to create/update.
* Required if used as a task.
* @param f the Manifest file to be written
*/
public void setFile(File f) {
manifestFile = f;
}

/**
* Update policy: either "update" or "replace"; default is "replace".
* @param m the mode value - update or replace.
*/
public void setMode(Mode m) {
mode = m;
}

/**
* Create or update the Manifest when used as a task.
*
* @throws BuildException if the manifest cannot be written.
*/
public void execute() throws BuildException {
if (manifestFile == null) {
throw new BuildException("the file attribute is required");
}

Manifest toWrite = Manifest.getDefaultManifest();
Manifest current = null;
BuildException error = null;

if (manifestFile.exists()) {
FileReader f = null;
try {
f = new FileReader(manifestFile);
current = new Manifest(f);
} catch (ManifestException m) {
error = new BuildException("Existing manifest " + manifestFile
+ " is invalid", m, location);
} catch (IOException e) {
error = new BuildException("Failed to read " + manifestFile,
e, location);
} finally {
if (f != null) {
try {
f.close();
} catch (IOException e) {}
}
}
}

try {
if (mode.getValue().equals("update") && manifestFile.exists()) {
if (current != null) {
toWrite.merge(current);
} else if (error != null) {
throw error;
}
}

toWrite.merge(nestedManifest);
} catch (ManifestException m) {
throw new BuildException("Manifest is invalid", m, location);
}

if (toWrite.equals(current)) {
log("Manifest has not changed, do not recreate",
Project.MSG_VERBOSE);
return;
}

PrintWriter w = null;
try {
w = new PrintWriter(new FileWriter(manifestFile));
toWrite.write(w);
} catch (IOException e) {
throw new BuildException("Failed to write " + manifestFile,
e, location);
} finally {
if (w != null) {
w.close();
}
}
}

}

+ 29
- 10
src/main/org/apache/tools/ant/taskdefs/MatchingTask.java View File

@@ -66,12 +66,12 @@ import java.util.StringTokenizer;
import java.util.Enumeration;

/**
* This is an abstract task that should be used by all those tasks that
* This is an abstract task that should be used by all those tasks that
* require to include or exclude files based on pattern matching.
*
* @author Arnout J. Kuiper
* <a href="mailto:ajkuiper@wxs.nl">ajkuiper@wxs.nl</a>
* @author Stefano Mazzocchi
* @author Arnout J. Kuiper
* <a href="mailto:ajkuiper@wxs.nl">ajkuiper@wxs.nl</a>
* @author Stefano Mazzocchi
* <a href="mailto:stefano@apache.org">stefano@apache.org</a>
* @author Sam Ruby <a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a>
* @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a>
@@ -99,14 +99,14 @@ public abstract class MatchingTask extends Task implements SelectorContainer {
public PatternSet.NameEntry createInclude() {
return fileset.createInclude();
}
/**
* add a name entry on the include files list
*/
public PatternSet.NameEntry createIncludesFile() {
return fileset.createIncludesFile();
}
/**
* add a name entry on the exclude list
*/
@@ -120,7 +120,7 @@ public abstract class MatchingTask extends Task implements SelectorContainer {
public PatternSet.NameEntry createExcludesFile() {
return fileset.createExcludesFile();
}
/**
* add a set of patterns
*/
@@ -149,7 +149,7 @@ public abstract class MatchingTask extends Task implements SelectorContainer {
log("The items attribute is deprecated. " +
"Please use the includes attribute.",
Project.MSG_WARN);
if (itemString == null || itemString.equals("*")
if (itemString == null || itemString.equals("*")
|| itemString.equals(".")) {
createInclude().setName("**");
} else {
@@ -162,7 +162,7 @@ public abstract class MatchingTask extends Task implements SelectorContainer {
}
}
}
/**
* Sets the set of exclude patterns. Patterns may be separated by a comma
* or a space.
@@ -174,7 +174,7 @@ public abstract class MatchingTask extends Task implements SelectorContainer {
}

/**
* List of filenames and directory names to not include. They should be
* List of filenames and directory names to not include. They should be
* either , or " " (space) separated. The ignored files will be logged.
*
* @param ignoreString the string containing the files to ignore.
@@ -232,6 +232,25 @@ public abstract class MatchingTask extends Task implements SelectorContainer {
fileset.setExcludesfile(excludesfile);
}

/**
* Sets case sensitivity of the file system
*
* @param isCaseSensitive "true"|"on"|"yes" if file system is case
* sensitive, "false"|"off"|"no" when not.
*/
public void setCaseSensitive(boolean isCaseSensitive) {
fileset.setCaseSensitive(isCaseSensitive);
}

/**
* Sets whether or not symbolic links should be followed.
*
* @param followSymlinks whether or not symbolic links should be followed
*/
public void setFollowSymlinks(boolean followSymlinks) {
fileset.setFollowSymlinks(followSymlinks);
}

/**
* Indicates whether there are any selectors here.
*


+ 30
- 8
src/main/org/apache/tools/ant/taskdefs/PathConvert.java View File

@@ -69,7 +69,7 @@ import java.util.Vector;
import java.io.File;

/**
* This task converts path and classpath information to a specific target OS
* Converts path and classpath information to a specific target OS
* format. The resulting formatted path is placed into the specified property.
*
* @author Larry Streepy <a href="mailto:streepy@healthlanguage.com">
@@ -100,6 +100,10 @@ public class PathConvert extends Task {
* Set if we're running on windows
*/
private boolean onWindows = false;
/**
* Set if we should create a new property even if the result is empty
*/
private boolean setonempty = true;
/**
* The property to receive the conversion
*/
@@ -268,6 +272,17 @@ public class PathConvert extends Task {
targetWindows = !targetOS.equals("unix");
}

/**
* Set setonempty
*
* If false, don't set the new property if the result is the empty string.
* @param setonempty true or false
*
* @since Ant 1.5
*/
public void setSetonempty(boolean setonempty) {
this.setonempty = setonempty;
}

/**
* The property into which the converted path will be placed.
@@ -401,13 +416,20 @@ public class PathConvert extends Task {
}
}

// Place the result into the specified property
if( rslt.length() > 0 ) {
String value = rslt.toString();
log("Set property " + property + " = " + value,
Project.MSG_VERBOSE);
getProject().setNewProperty(property, value);
}
// Place the result into the specified property,
// unless setonempty == false
String value = rslt.toString();
if(setonempty) {
log("Set property " + property + " = " + value,
Project.MSG_VERBOSE);
getProject().setNewProperty(property, value);
} else {
if(rslt.length() > 0) {
log("Set property " + property + " = " + value,
Project.MSG_VERBOSE);
getProject().setNewProperty(property, value);
}
}
} finally {
path = savedPath;
dirSep = savedDirSep;


+ 0
- 5
src/main/org/apache/tools/ant/taskdefs/Property.java View File

@@ -162,12 +162,10 @@ public class Property extends Task {
* Sets the value of the property.
* @param value value to assign
*/

public void setValue(String value) {
this.value = value;
}


public String getValue() {
return value;
}
@@ -250,7 +248,6 @@ public class Property extends Task {
* will be ${env.Path} not ${env.PATH} on Windows 2000.
* @param env prefix
*/

public void setEnvironment(String env) {
this.env = env;
}
@@ -262,12 +259,10 @@ public class Property extends Task {
return env;
}


/**
* The classpath to use when looking up a resource.
* @param classpath to add to any existing classpath
*/

public void setClasspath(Path classpath) {
if (this.classpath == null) {
this.classpath = classpath;


+ 1
- 2
src/main/org/apache/tools/ant/taskdefs/Recorder.java View File

@@ -67,7 +67,7 @@ import java.io.IOException;
import java.util.Hashtable;

/**
* Add a listener to the current build process that records the
* Adds a listener to the current build process that records the
* output to a file.
* <p>Several recorders can exist at the same time. Each recorder is
* associated with a file. The filename is used as a unique identifier for
@@ -79,7 +79,6 @@ import java.util.Hashtable;
* <p>Some technical issues: the file's print stream is flushed for &quot;finished&quot;
* events (buildFinished, targetFinished and taskFinished), and is closed on
* a buildFinished event.</p>
* @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
* @see RecorderEntry
* @version 0.5


+ 76
- 84
src/main/org/apache/tools/ant/taskdefs/SQLExec.java View File

@@ -1,7 +1,7 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -54,15 +54,10 @@

package org.apache.tools.ant.taskdefs;

import org.apache.tools.ant.Task;
import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project;

import org.apache.tools.ant.types.EnumeratedAttribute;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;
import org.apache.tools.ant.types.FileSet;

import java.io.File;
@@ -79,39 +74,36 @@ import java.io.FileInputStream;
import java.util.Enumeration;
import java.util.StringTokenizer;
import java.util.Vector;
import java.util.Properties;
import java.util.Hashtable;

import java.sql.Connection;
import java.sql.Statement;
import java.sql.Driver;
import java.sql.SQLException;
import java.sql.DatabaseMetaData;
import java.sql.SQLWarning;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

/**
* <p>Executes a series of SQL statements via JDBC to a database. Statements can
* either be read in from a text file using the <i>src</i> attribute or from
* Executes a series of SQL statements on a database using JDBC.
*
* <p>Statements can
* either be read in from a text file using the <i>src</i> attribute or from
* between the enclosing SQL tags.</p>
*
* <p>Multiple statements can be provided, separated by semicolons (or the
* defined <i>delimiter</i>). Individual lines within the statements can be
*
* <p>Multiple statements can be provided, separated by semicolons (or the
* defined <i>delimiter</i>). Individual lines within the statements can be
* commented using either --, // or REM at the start of the line.</p>
*
* <p>The <i>autocommit</i> attribute specifies whether auto-commit should be
* turned on or off whilst executing the statements. If auto-commit is turned
* on each statement will be executed and committed. If it is turned off the
*
* <p>The <i>autocommit</i> attribute specifies whether auto-commit should be
* turned on or off whilst executing the statements. If auto-commit is turned
* on each statement will be executed and committed. If it is turned off the
* statements will all be executed as one transaction.</p>
*
* <p>The <i>onerror</i> attribute specifies how to proceed when an error occurs
* during the execution of one of the statements.
*
* <p>The <i>onerror</i> attribute specifies how to proceed when an error occurs
* during the execution of one of the statements.
* The possible values are: <b>continue</b> execution, only show the error;
* <b>stop</b> execution and commit transaction;
* and <b>abort</b> execution and transaction and fail task.</p>

*
*
* @author <a href="mailto:jeff@custommonkey.org">Jeff Martin</a>
* @author <A href="mailto:gholam@xtra.co.nz">Michael McCallum</A>
* @author <A href="mailto:tim.stephenson@sybase.com">Tim Stephenson</A>
@@ -133,13 +125,13 @@ public class SQLExec extends JDBCTask {
}
}

private int goodSql = 0;

private int totalSql = 0;

/**
/**
* Database connection
*/
private Connection conn = null;
@@ -173,13 +165,13 @@ public class SQLExec extends JDBCTask {
* SQL Statement delimiter
*/
private String delimiter = ";";
/**
* The delimiter type indicating whether the delimiter will
* only be recognized on a line by itself
*/
private String delimiterType = DelimiterType.NORMAL;
/**
* Print SQL results.
*/
@@ -195,12 +187,12 @@ public class SQLExec extends JDBCTask {
*/
private File output = null;

/**
* Action to perform if an error is found
**/
private String onError = "abort";
/**
* Encoding to use when reading SQL statements from a file
*/
@@ -211,23 +203,23 @@ public class SQLExec extends JDBCTask {
*/
private boolean append = false;

/**
* Set the name of the sql file to be run.
* Set the name of the SQL file to be run.
* Required unless statements are enclosed in the build file
*/
public void setSrc(File srcFile) {
this.srcFile = srcFile;
}
/**
* Set an inline SQL command to execute.
* Set an inline SQL command to execute.
* NB: Properties are not expanded in this text.
*/
public void addText(String sql) {
this.sqlCommand += sql;
}
/**
* Adds a set of files (nested fileset attribute).
*/
@@ -244,7 +236,7 @@ public class SQLExec extends JDBCTask {
transactions.addElement(t);
return t;
}
/**
* Set the file encoding to use on the SQL files read in
*
@@ -253,9 +245,9 @@ public class SQLExec extends JDBCTask {
public void setEncoding(String encoding) {
this.encoding = encoding;
}
/**
* Set the delimiter that separates SQL statements;
* Set the delimiter that separates SQL statements;
* optional, default &quot;;&quot;
*
* <p>For example, set this to "go" and delimitertype to "ROW" for
@@ -266,7 +258,7 @@ public class SQLExec extends JDBCTask {
}

/**
* Set the Delimiter type for this sql task; default "normal"
* Set the delimiter type: "normal" or "row" (default "normal").
*
* <p>The delimiter type takes two values - normal and row. Normal
* means that any occurence of the delimiter terminate the SQL
@@ -276,7 +268,7 @@ public class SQLExec extends JDBCTask {
public void setDelimiterType(DelimiterType delimiterType) {
this.delimiterType = delimiterType.getValue();
}
/**
* Print result sets from the statements;
* optional, default false
@@ -284,9 +276,9 @@ public class SQLExec extends JDBCTask {
public void setPrint(boolean print) {
this.print = print;
}
/**
* Print headers for result sets from the
* Print headers for result sets from the
* statements; optional, default true.
*/
public void setShowheaders(boolean showheaders) {
@@ -294,8 +286,8 @@ public class SQLExec extends JDBCTask {
}

/**
* Set the output file;
* optional, defaults to the ant log
* Set the output file;
* optional, defaults to the Ant log.
*/
public void setOutput(File output) {
this.output = output;
@@ -311,7 +303,7 @@ public class SQLExec extends JDBCTask {
this.append = append;
}

/**
* Action to perform when statement fails: continue, stop, or abort
* optional; default &quot;abort&quot;
@@ -330,15 +322,15 @@ public class SQLExec extends JDBCTask {
sqlCommand = sqlCommand.trim();

try {
if (srcFile == null && sqlCommand.length() == 0
&& filesets.isEmpty()) {
if (srcFile == null && sqlCommand.length() == 0
&& filesets.isEmpty()) {
if (transactions.size() == 0) {
throw new BuildException("Source file or fileset, "
+ "transactions or sql statement "
+ "must be set!", location);
}
}
if (srcFile != null && !srcFile.exists()) {
throw new BuildException("Source file does not exist!", location);
}
@@ -348,16 +340,16 @@ public class SQLExec extends JDBCTask {
FileSet fs = (FileSet) filesets.elementAt(i);
DirectoryScanner ds = fs.getDirectoryScanner(project);
File srcDir = fs.getDir(project);
String[] srcFiles = ds.getIncludedFiles();
// Make a transaction for each file
for (int j = 0 ; j < srcFiles.length ; j++) {
Transaction t = createTransaction();
t.setSrc(new File(srcDir, srcFiles[j]));
}
}
// Make a transaction group for the outer command
Transaction t = createTransaction();
t.setSrc(srcFile);
@@ -369,11 +361,11 @@ public class SQLExec extends JDBCTask {
try {
statement = conn.createStatement();

PrintStream out = System.out;
try {
if (output != null) {
log("Opening PrintStream to output file " + output,
log("Opening PrintStream to output file " + output,
Project.MSG_VERBOSE);
out = new PrintStream(
new BufferedOutputStream(
@@ -381,11 +373,11 @@ public class SQLExec extends JDBCTask {
.getAbsolutePath(),
append)));
}
// Process all transactions
for (Enumeration e = transactions.elements();
for (Enumeration e = transactions.elements();
e.hasMoreElements();) {
((Transaction) e.nextElement()).runTransaction(out);
if (!isAutocommit()) {
log("Commiting transaction", Project.MSG_VERBOSE);
@@ -396,7 +388,7 @@ public class SQLExec extends JDBCTask {
if (out != null && out != System.out) {
out.close();
}
}
}
} catch (IOException e){
if (!isAutocommit() && conn != null && onError.equals("abort")) {
try {
@@ -421,8 +413,8 @@ public class SQLExec extends JDBCTask {
}
} catch (SQLException e) {}
}
log(goodSql + " of " + totalSql +
log(goodSql + " of " + totalSql +
" SQL statements executed successfully");
} finally {
transactions = savedTransaction;
@@ -434,13 +426,13 @@ public class SQLExec extends JDBCTask {
/**
* read in lines and execute them
*/
protected void runStatements(Reader reader, PrintStream out)
protected void runStatements(Reader reader, PrintStream out)
throws SQLException, IOException {
String sql = "";
String line = "";
BufferedReader in = new BufferedReader(reader);
while ((line = in.readLine()) != null){
line = line.trim();
line = project.replaceProperties(line);
@@ -457,36 +449,36 @@ public class SQLExec extends JDBCTask {
continue;
}
}
sql += " " + line;
sql = sql.trim();
// SQL defines "--" as a comment to EOL
// and in Oracle it may contain a hint
// so we cannot just remove it, instead we must end it
if (line.indexOf("--") >= 0) {
sql += "\n";
}
if ((delimiterType.equals(DelimiterType.NORMAL)
&& sql.endsWith(delimiter))
if ((delimiterType.equals(DelimiterType.NORMAL)
&& sql.endsWith(delimiter))
||
(delimiterType.equals(DelimiterType.ROW)
(delimiterType.equals(DelimiterType.ROW)
&& line.equals(delimiter))) {
log("SQL: " + sql, Project.MSG_VERBOSE);
execSQL(sql.substring(0, sql.length() - delimiter.length()),
execSQL(sql.substring(0, sql.length() - delimiter.length()),
out);
sql = "";
}
}
// Catch any statements not followed by ;
if (!sql.equals("")){
execSQL(sql, out);
}
}
/**
* Exec the sql statement.
*/
@@ -495,18 +487,18 @@ public class SQLExec extends JDBCTask {
if ("".equals(sql.trim())) {
return;
}
try {
try {
totalSql++;
if (!statement.execute(sql)) {
log(statement.getUpdateCount() + " rows affected",
log(statement.getUpdateCount() + " rows affected",
Project.MSG_VERBOSE);
} else {
if (print) {
printResults(out);
}
}
SQLWarning warning = conn.getWarnings();
while (warning != null){
log(warning + " sql warning", Project.MSG_VERBOSE);
@@ -522,7 +514,7 @@ public class SQLExec extends JDBCTask {
log(e.toString(), Project.MSG_ERR);
}
}
/**
* print any results in the statement.
*/
@@ -551,7 +543,7 @@ public class SQLExec extends JDBCTask {
if (columnValue != null) {
columnValue = columnValue.trim();
}
if (first) {
first = false;
} else {
@@ -605,20 +597,20 @@ public class SQLExec extends JDBCTask {
/**
*
*/
private void runTransaction(PrintStream out)
private void runTransaction(PrintStream out)
throws IOException, SQLException {
if (tSqlCommand.length() != 0) {
log("Executing commands", Project.MSG_INFO);
runStatements(new StringReader(tSqlCommand), out);
}
if (tSrcFile != null) {
log("Executing file: " + tSrcFile.getAbsolutePath(),
log("Executing file: " + tSrcFile.getAbsolutePath(),
Project.MSG_INFO);
Reader reader =
Reader reader =
(encoding == null) ? new FileReader(tSrcFile)
: new InputStreamReader(
new FileInputStream(tSrcFile),
new FileInputStream(tSrcFile),
encoding);
try {
runStatements(reader, out);


+ 14
- 13
src/main/org/apache/tools/ant/taskdefs/Sleep.java View File

@@ -58,18 +58,19 @@ import org.apache.tools.ant.Task;
import org.apache.tools.ant.BuildException;

/**
* Sleep for a period of time
* Sleep, or pause, for a period of time.
*
* A task for sleeping a short period of time, useful when a
* build or deployment process requires an interval between tasks.
*<p>
* A negative value can be supplied to any of attributes provided the total sleep time
* A negative value can be supplied to any of attributes provided the total sleep time
* is positive, pending fundamental changes in physics and JVM
* execution tims</p>
* Note that sleep times are always hints to be interpred by the OS how it feels
* small times may either be ignored or rounded up to a minimum timeslice. Note
* also that the system clocks often have a fairly low granularity too, which complicates
* Note that sleep times are always hints to be interpred by the OS how it feels
* small times may either be ignored or rounded up to a minimum timeslice. Note
* also that the system clocks often have a fairly low granularity too, which complicates
* measuring how long a sleep actually took.</p>
*
*
* @author steve_l@iseran.com steve loughran
* @since Ant 1.4
* @ant.task category="utility"
@@ -87,7 +88,7 @@ public class Sleep extends Task {
private int seconds = 0;

/**
* sleep hours
* sleep hours
*/
private int hours = 0;
/**
@@ -110,7 +111,7 @@ public class Sleep extends Task {


/**
* adds some seconds to the Sleep
* seconds to add to the sleep time
*
* @param seconds The new Seconds value
*/
@@ -120,7 +121,7 @@ public class Sleep extends Task {


/**
* hours to to add to the sleep time
* hours to add to the sleep time.
*
* @param hours The new Hours value
*/
@@ -130,7 +131,7 @@ public class Sleep extends Task {


/**
* Sets the Minutes attribute of the Sleep object
* minutes to add to the sleep time
*
* @param minutes The new Minutes value
*/
@@ -140,7 +141,7 @@ public class Sleep extends Task {


/**
* minutes to add to the sleep time
* milliseconds to add to the sleep time
*
* @param milliseconds The new Milliseconds value
*/
@@ -179,7 +180,7 @@ public class Sleep extends Task {
*/

private long getSleepTime() {
return ((((long) hours * 60) + minutes) * 60 + seconds) * 1000
return ((((long) hours * 60) + minutes) * 60 + seconds) * 1000
+ milliseconds;
}

@@ -189,7 +190,7 @@ public class Sleep extends Task {
*
* @throws BuildException if something is invalid
*/
public void validate()
public void validate()
throws BuildException {
if (getSleepTime() < 0) {
throw new BuildException("Negative sleep periods are not "


+ 2
- 1
src/main/org/apache/tools/ant/taskdefs/Transform.java View File

@@ -57,6 +57,7 @@ package org.apache.tools.ant.taskdefs;
/**
* Has been merged into ExecuteOn, empty class for backwards compatibility.
*
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @ant.task ignore="true"
*/
public class Transform extends ExecuteOn {}

+ 3
- 3
src/main/org/apache/tools/ant/taskdefs/Tstamp.java View File

@@ -72,7 +72,7 @@ import java.util.Vector;
import java.text.SimpleDateFormat;

/**
* Sets properties to the current time.
* Sets properties to the current time, or offsets from the current time.
* The default properties are TSTAMP, DSTAMP and TODAY;
*
* @author costin@dnt.ro
@@ -204,7 +204,7 @@ public class Tstamp extends Task {
if (st.hasMoreElements()) {
variant = st.nextToken();
if (st.hasMoreElements()) {
throw new BuildException("bad locale format",
throw new BuildException("bad locale format",
getLocation());
}
}
@@ -212,7 +212,7 @@ public class Tstamp extends Task {
country = "";
}
} catch (NoSuchElementException e) {
throw new BuildException("bad locale format", e,
throw new BuildException("bad locale format", e,
getLocation());
}
}


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/UpToDate.java View File

@@ -70,7 +70,7 @@ import java.util.Enumeration;
import java.util.Vector;

/**
* Will set the given property if the specified target has a timestamp
* Sets the given property if the specified target has a timestamp
* greater than all of the source files.
*
* @author William Ferguson


+ 11
- 11
src/main/org/apache/tools/ant/taskdefs/War.java View File

@@ -68,7 +68,7 @@ import java.io.IOException;
* Contains special treatment for files that should end up in the
* <code>WEB-INF/lib</code>, <code>WEB-INF/classes</code> or
* <code>WEB-INF</code> directories of the Web Application Archive.</p>
* <p>(The War task is a shortcut for specifying the particular layout of a WAR file.
* <p>(The War task is a shortcut for specifying the particular layout of a WAR file.
* The same thing can be accomplished by using the <i>prefix</i> and <i>fullpath</i>
* attributes of zipfilesets in a Zip or Jar task.)</p>
* <p>The extended zipfileset element from the zip task (with attributes <i>prefix</i>, <i>fullpath</i>, and <i>src</i>) is available in the War task.</p>
@@ -86,7 +86,7 @@ public class War extends Jar {
* our web.xml deployment descriptor
*/
private File deploymentDescriptor;
/**
* flag set if the descriptor is added
*/
@@ -99,10 +99,10 @@ public class War extends Jar {
}

/**
* <i>Deprecated<i> name of the file to create
* -use <tt>destfile</tt> instead.
* <i>Deprecated<i> name of the file to create
* -use <tt>destfile</tt> instead.
* @deprecated Use setDestFile(File) instead
* @ant.attribute ignored="true"
* @ant.attribute ignore="true"
*/
public void setWarfile(File warFile) {
setDestFile(warFile);
@@ -115,8 +115,8 @@ public class War extends Jar {
public void setWebxml(File descr) {
deploymentDescriptor = descr;
if (!deploymentDescriptor.exists()) {
throw new BuildException("Deployment descriptor: "
+ deploymentDescriptor
throw new BuildException("Deployment descriptor: "
+ deploymentDescriptor
+ " does not exist.");
}

@@ -131,7 +131,7 @@ public class War extends Jar {
/**
* add files under WEB-INF/lib/
*/
public void addLib(ZipFileSet fs) {
// We just set the prefix for this fileset, and pass it up.
fs.setPrefix("WEB-INF/lib/");
@@ -148,7 +148,7 @@ public class War extends Jar {
}

/**
* files to add under WEB-INF;
* files to add under WEB-INF;
*/
public void addWebinf(ZipFileSet fs) {
// We just set the prefix for this fileset, and pass it up.
@@ -180,8 +180,8 @@ public class War extends Jar {
// it's being added twice, meaning the same file is specified
// by the "webxml" attribute and in a <fileset> element.
if (vPath.equalsIgnoreCase("WEB-INF/web.xml")) {
if (deploymentDescriptor == null
|| !deploymentDescriptor.equals(file)
if (deploymentDescriptor == null
|| !deploymentDescriptor.equals(file)
|| descriptorAdded) {
log("Warning: selected " + archiveType
+ " files include a WEB-INF/web.xml which will be ignored "


+ 0
- 9
src/main/org/apache/tools/ant/taskdefs/XSLTLiaison.java View File

@@ -92,15 +92,6 @@ public interface XSLTLiaison {
*/
void addParam(String name, String expression) throws Exception;

/**
* set the output type to use for the transformation. Only "xml" (the
* default) is guaranteed to work for all parsers. Xalan2 also
* supports "html" and "text".
* @param type the output method to use
* @since Ant 1.5
*/
void setOutputtype(String type) throws Exception;

/**
* Perform the transformation of a file into another.
* @param infile the input file, probably an XML one. :-)


+ 84
- 40
src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java View File

@@ -62,6 +62,7 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.taskdefs.optional.TraXLiaison;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;
import org.apache.tools.ant.util.FileUtils;
@@ -69,7 +70,7 @@ import org.apache.tools.ant.types.XMLCatalog;
import org.xml.sax.EntityResolver;

/**
* A Task to process via XSLT a set of XML documents. This is
* Processes a set of XML documents via XSLT. This is
* useful for building views of XML based documentation.
*
* @version $Revision$
@@ -127,7 +128,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
private FileUtils fileUtils;

/** XSL output method to be used */
private String outputtype = null;
private Vector outputProperties = new Vector();

/** for resolving entities such as dtds */
private XMLCatalog xmlCatalog = new XMLCatalog();
@@ -137,11 +138,11 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
"org.apache.tools.ant.taskdefs.optional.TraXLiaison";

/** Name of the now-deprecated XSLP Liason class */
private static final String XSLP_LIASON_CLASS =
private static final String XSLP_LIAISON_CLASS =
"org.apache.tools.ant.taskdefs.optional.XslpLiaison";

/** Name of the Xalan liason class */
private static final String XALAN_LIASON_CLASS =
private static final String XALAN_LIAISON_CLASS =
"org.apache.tools.ant.taskdefs.optional.XalanLiaison";

/**
@@ -298,8 +299,6 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
/**
* Name of the stylesheet to use - given either relative
* to the project's basedir or as an absolute path; required.
*
* @param xslFile the stylesheet to use
*/
public void setStyle(String xslFile) {
this.xslFile = xslFile;
@@ -371,10 +370,10 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
} else if (proc.equals("xslp")) {
log("DEPRECATED - xslp processor is deprecated. Use trax or "
+ "xalan instead.");
final Class clazz = loadClass(XSLP_LIASON_CLASS);
final Class clazz = loadClass(XSLP_LIAISON_CLASS);
liaison = (XSLTLiaison) clazz.newInstance();
} else if (proc.equals("xalan")) {
final Class clazz = loadClass(XALAN_LIASON_CLASS);
final Class clazz = loadClass(XALAN_LIAISON_CLASS);
liaison = (XSLTLiaison) clazz.newInstance();
} else {
liaison = (XSLTLiaison) loadClass(proc).newInstance();
@@ -631,17 +630,64 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
}
return expression;
}
} // Param


/**
* Create an instance of an output property to be configured.
* @return the newly created output property.
* @since Ant 1.5
*/
public OutputProperty createOutputProperty() {
OutputProperty p = new OutputProperty();
outputProperties.addElement(p);
return p;
}


/**
* Set the output type to use for the transformation;
* optional, default="xml".
* Only "xml" is guaranteed to work for all parsers.
* Xalan2 also supports "html" and "text".
* @param type the output method to use
* Specify how the result tree should be output as specified
* in the <a href="http://www.w3.org/TR/xslt#output">
* specification</a>.
* @since Ant 1.5
*/
public void setOutputtype(String type) {
this.outputtype = type;
public static class OutputProperty {
/** output property name */
private String name;

/** output property value */
private String value;

/**
* @return the output property name.
*/
public String getName() {
return name;
}

/**
* set the name for this property
* @param name A non-null String that specifies an
* output property name, which may be namespace qualified.
*/
public void setName(String name) {
this.name = name;
}

/**
* @return the output property value.
*/
public String getValue() {
return value;
}

/**
* set the value for this property
* @param value The non-null string value of the output property.
*/
public void setValue(String value) {
this.value = value;
}
}

/**
@@ -649,7 +695,6 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
*/
public void init() throws BuildException {
super.init();

xmlCatalog.setProject(project);
}

@@ -668,38 +713,37 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
try {
log("Loading stylesheet " + stylesheet, Project.MSG_INFO);
liaison.setStylesheet(stylesheet);
if (outputtype != null) {
liaison.setOutputtype(outputtype);
}
for (Enumeration e = params.elements(); e.hasMoreElements();) {
Param p = (Param) e.nextElement();
liaison.addParam(p.getName(), p.getExpression());
}
if (liaison instanceof TraXLiaison) {
configureTraXLiaison((TraXLiaison)liaison);
}
} catch (Exception ex) {
log("Failed to read stylesheet " + stylesheet, Project.MSG_INFO);
log("Failed to transform using stylesheet " + stylesheet, Project.MSG_INFO);
throw new BuildException(ex);
}
}

try {
// if liaison is a TraxLiason, use XMLCatalog as the entity
// resolver and URI resolver
if (liaison.getClass().getName().equals(TRAX_LIAISON_CLASS) &&
xmlCatalog != null) {
log("Configuring TraxLiaison: setting entity resolver " +
"and setting URI resolver", Project.MSG_DEBUG);
Method resolver = liaison.getClass()
.getDeclaredMethod("setEntityResolver",
new Class[] {EntityResolver.class});
resolver.invoke(liaison, new Object[] {xmlCatalog});

resolver = liaison.getClass()
.getDeclaredMethod("setURIResolver",
new Class[] {loadClass("javax.xml.transform.URIResolver")});
resolver.invoke(liaison, new Object[] {xmlCatalog});
}
} catch (Exception e) {
throw new BuildException("Failed to configure XMLCatalog for "
+ "TraxLiaison", e);
/**
* Specific configuration for the TRaX liaison... support for
* all other has been dropped so this liaison will soon look
* like the exact copy of JAXP interface..
* @param liaison the TRaXLiaison to configure.
*/
protected void configureTraXLiaison(TraXLiaison liaison){
// use XMLCatalog as the entity resolver and URI resolver
if (xmlCatalog != null) {
liaison.setEntityResolver(xmlCatalog);
liaison.setURIResolver(xmlCatalog);
}

// configure output properties
for (Enumeration props = outputProperties.elements();
props.hasMoreElements();) {
OutputProperty prop = (OutputProperty)props.nextElement();
liaison.setOutputProperty(prop.getName(), prop.getValue());
}
}



+ 2
- 1
src/main/org/apache/tools/ant/taskdefs/XmlProperty.java View File

@@ -72,8 +72,9 @@ import java.io.IOException;
import java.util.Vector;

/**
* Task that gets property values from a valid xml file,
* Loads property values from a valid XML file,
* generating the property names from the file's element and attribute names.
*
* Example:
* <pre>
* &lt;root-tag myattr="true"&gt;


+ 40
- 39
src/main/org/apache/tools/ant/taskdefs/Zip.java View File

@@ -84,7 +84,7 @@ import org.apache.tools.zip.ZipOutputStream;
import org.apache.tools.zip.ZipEntry;

/**
* Create a zipfile.
* Create a Zip file.
*
* @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
* @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a>
@@ -116,9 +116,9 @@ public class Zip extends MatchingTask {
protected Hashtable addedDirs = new Hashtable();
private Vector addedFiles = new Vector();

/**
/**
* true when we are adding new files into the Zip file, as opposed
* to adding back the unchanged files
* to adding back the unchanged files
*/
private boolean addingNewFiles = false;

@@ -144,7 +144,7 @@ public class Zip extends MatchingTask {
* create the file.
* @since Ant 1.5
* @deprecated Use setDestFile(File) instead
* @ant.attribute ignored="true"
* @ant.attribute ignore="true"
*/
public void setFile(File file) {
setDestFile(file);
@@ -276,12 +276,12 @@ public class Zip extends MatchingTask {
if (baseDir == null && filesets.size() == 0
&& groupfilesets.size() == 0 && "zip".equals(archiveType)) {
throw new BuildException("basedir attribute must be set, "
+ "or at least "
+ "or at least "
+ "one fileset must be given!");
}

if (zipFile == null) {
throw new BuildException("You must specify the "
throw new BuildException("You must specify the "
+ archiveType + " file to create!");
}

@@ -292,22 +292,6 @@ public class Zip extends MatchingTask {

addingNewFiles = true;
doUpdate = doUpdate && zipFile.exists();
if (doUpdate) {
FileUtils fileUtils = FileUtils.newFileUtils();
renamedFile =
fileUtils.createTempFile("zip", ".tmp",
fileUtils.getParentFile(zipFile));

try {
if (!zipFile.renameTo(renamedFile)) {
throw new BuildException("Unable to rename old file to "
+ "temporary file");
}
} catch (SecurityException e) {
throw new BuildException("Not allowed to rename old file to "
+ "temporary file");
}
}

// Add the files found in groupfileset to fileset
for (int i = 0; i < groupfilesets.size(); i++) {
@@ -319,7 +303,7 @@ public class Zip extends MatchingTask {
File basedir = scanner.getBasedir();
for (int j = 0; j < files.length; j++) {

log("Adding file " + files[j] + " to fileset",
log("Adding file " + files[j] + " to fileset",
Project.MSG_VERBOSE);
ZipFileSet zf = new ZipFileSet();
zf.setSrc(new File(basedir, files[j]));
@@ -348,9 +332,26 @@ public class Zip extends MatchingTask {
if (isUpToDate(scanners, zipFile)) {
return;
}

if (doUpdate) {
FileUtils fileUtils = FileUtils.newFileUtils();
renamedFile =
fileUtils.createTempFile("zip", ".tmp",
fileUtils.getParentFile(zipFile));

try {
if (!zipFile.renameTo(renamedFile)) {
throw new BuildException("Unable to rename old file "
+ "to temporary file");
}
} catch (SecurityException e) {
throw new BuildException("Not allowed to rename old file "
+ "to temporary file");
}
}

String action = doUpdate ? "Updating " : "Building ";
log(action + archiveType + ": " + zipFile.getAbsolutePath());

ZipOutputStream zOut =
@@ -416,16 +417,16 @@ public class Zip extends MatchingTask {
}
}
} catch (IOException ioe) {
String msg = "Problem creating " + archiveType + ": "
String msg = "Problem creating " + archiveType + ": "
+ ioe.getMessage();

// delete a bogus ZIP file
if (!zipFile.delete()) {
// delete a bogus ZIP file (but only if it's not the original one)
if ((!doUpdate || renamedFile != null) && !zipFile.delete()) {
msg += " (and the archive is probably corrupt but I could not "
+ "delete it)";
}

if (doUpdate) {
if (doUpdate && renamedFile != null) {
if (!renamedFile.renameTo(zipFile)) {
msg += " (and I couldn't rename the temporary file " +
renamedFile.getName() + " back)";
@@ -453,7 +454,7 @@ public class Zip extends MatchingTask {
* <p>Ensure parent directories have been added as well.
*/
protected void addFiles(FileScanner scanner, ZipOutputStream zOut,
String prefix, String fullpath)
String prefix, String fullpath)
throws IOException {

if (prefix.length() > 0 && fullpath.length() > 0) {
@@ -504,7 +505,7 @@ public class Zip extends MatchingTask {
}

protected void addZipEntries(ZipFileSet fs, DirectoryScanner ds,
ZipOutputStream zOut, String prefix,
ZipOutputStream zOut, String prefix,
String fullpath)
throws IOException {
log("adding zip entries: " + fullpath, Project.MSG_VERBOSE);
@@ -533,7 +534,7 @@ public class Zip extends MatchingTask {
} else {
addParentDirs(null, vPath, zOut, prefix);
if (!entry.isDirectory()) {
zipFile(in, zOut, prefix + vPath, entry.getTime(),
zipFile(in, zOut, prefix + vPath, entry.getTime(),
zipSrc);
}
}
@@ -569,7 +570,7 @@ public class Zip extends MatchingTask {
// In this case using java.util.zip will not work
// because it does not permit a zero-entry archive.
// Must create it manually.
log("Note: creating empty " + archiveType + " archive " + zipFile,
log("Note: creating empty " + archiveType + " archive " + zipFile,
Project.MSG_INFO);
OutputStream os = null;
try {
@@ -584,7 +585,7 @@ public class Zip extends MatchingTask {
os.write(empty);
} catch (IOException ioe) {
throw new BuildException("Could not create empty ZIP archive "
+ "(" + ioe.getMessage() + ")", ioe,
+ "(" + ioe.getMessage() + ")", ioe,
location);
} finally {
if (os != null) {
@@ -607,7 +608,7 @@ public class Zip extends MatchingTask {
* already); false if archive creation should proceed
* @exception BuildException if it likes
*/
protected boolean isUpToDate(FileScanner[] scanners, File zipFile)
protected boolean isUpToDate(FileScanner[] scanners, File zipFile)
throws BuildException {
String[][] fileNames = grabFileNames(scanners);
File[] files = grabFiles(scanners, fileNames);
@@ -627,7 +628,7 @@ public class Zip extends MatchingTask {
} else {
for (int i = 0; i < files.length; ++i) {
if (files[i].equals(zipFile)) {
throw new BuildException("A zip file cannot include "
throw new BuildException("A zip file cannot include "
+ "itself", location);
}
}
@@ -716,12 +717,12 @@ public class Zip extends MatchingTask {
log(vPath + " already added, skipping", Project.MSG_INFO);
return;
} else if (duplicate.equals("fail")) {
throw new BuildException("Duplicate file " + vPath
throw new BuildException("Duplicate file " + vPath
+ " was found and the duplicate "
+ "attribute is 'fail'.");
} else {
// duplicate equal to add, so we continue
log("duplicate file " + vPath
log("duplicate file " + vPath
+ " found, adding.", Project.MSG_VERBOSE);
}
} else {
@@ -791,7 +792,7 @@ public class Zip extends MatchingTask {
protected void zipFile(File file, ZipOutputStream zOut, String vPath)
throws IOException {
if (file.equals(zipFile)) {
throw new BuildException("A zip file cannot include itself",
throw new BuildException("A zip file cannot include itself",
location);
}



+ 3
- 3
src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java View File

@@ -74,8 +74,8 @@ import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.FileSet;

/**
* Change log task.
* The task will examine the output of cvs log and group related changes together.
* Examines the output of cvs log and group related changes together.
*
* It produces an XML output representing the list of changes.
* <PRE>
* <FONT color=#0000ff>&lt;!-- Root element --&gt;</FONT>
@@ -217,7 +217,7 @@ public class ChangeLogTask extends Task {
/**
* Execute task
*
* @exception BuildException if something goes wrong executing the
* @exception BuildException if something goes wrong executing the
* cvs command
*/
public void execute() throws BuildException {


+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java View File

@@ -70,8 +70,8 @@ import java.io.UnsupportedEncodingException;
import java.util.Vector;

/**
* Cvs tag diff.
* The task will examine the output of cvs rdiff between two tags.
* Examines the output of cvs rdiff between two tags.
*
* It produces an XML output representing the list of changes.
* <PRE>
* &lt;!-- Root element --&gt;


+ 4
- 1
src/main/org/apache/tools/ant/taskdefs/defaults.properties View File

@@ -61,7 +61,7 @@ checksum=org.apache.tools.ant.taskdefs.Checksum
waitfor=org.apache.tools.ant.taskdefs.WaitFor
input=org.apache.tools.ant.taskdefs.Input
loadfile=org.apache.tools.ant.taskdefs.LoadFile
manifest=org.apache.tools.ant.taskdefs.Manifest
manifest=org.apache.tools.ant.taskdefs.ManifestTask
loadproperties=org.apache.tools.ant.taskdefs.LoadProperties
basename=org.apache.tools.ant.taskdefs.Basename
dirname=org.apache.tools.ant.taskdefs.Dirname
@@ -119,12 +119,15 @@ stylebook=org.apache.tools.ant.taskdefs.optional.StyleBook
test=org.apache.tools.ant.taskdefs.optional.Test
pvcs=org.apache.tools.ant.taskdefs.optional.pvcs.Pvcs
p4change=org.apache.tools.ant.taskdefs.optional.perforce.P4Change
p4delete=org.apache.tools.ant.taskdefs.optional.perforce.P4Delete
p4label=org.apache.tools.ant.taskdefs.optional.perforce.P4Label
p4have=org.apache.tools.ant.taskdefs.optional.perforce.P4Have
p4sync=org.apache.tools.ant.taskdefs.optional.perforce.P4Sync
p4edit=org.apache.tools.ant.taskdefs.optional.perforce.P4Edit
p4submit=org.apache.tools.ant.taskdefs.optional.perforce.P4Submit
p4counter=org.apache.tools.ant.taskdefs.optional.perforce.P4Counter
p4revert=org.apache.tools.ant.taskdefs.optional.perforce.P4Revert
p4reopen=org.apache.tools.ant.taskdefs.optional.perforce.P4Reopen
javah=org.apache.tools.ant.taskdefs.optional.Javah
ccupdate=org.apache.tools.ant.taskdefs.optional.clearcase.CCUpdate
cccheckout=org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckout


+ 29
- 20
src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java View File

@@ -70,7 +70,7 @@ import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path;

/**
* ANTLR task.
* Invokes the ANTLR Translator generator on a grammar file.
*
* @author <a href="mailto:emeade@geekfarm.org">Erik Meade</a>
* @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
@@ -121,32 +121,38 @@ public class ANTLR extends Task {
commandline.setClassname("antlr.Tool");
}

/**
* The grammar file to process.
*/
public void setTarget(File target) {
log("Setting target to: " + target.toString(), Project.MSG_VERBOSE);
this.target = target;
}

/**
* The directory to write the generated files to.
*/
public void setOutputdirectory(File outputDirectory) {
log("Setting output directory to: " + outputDirectory.toString(), Project.MSG_VERBOSE);
this.outputDirectory = outputDirectory;
}

/**
* Sets an optional super grammar file
* Sets an optional super grammar file.
*/
public void setGlib(String superGrammar) {
this.superGrammar = superGrammar;
}
/**
* Sets a flag to enable ParseView debugging
*/
public void setDebug(boolean enable) {
debug = enable;
}
/**
* Sets a flag to emit html
* If true, emit html
*/
public void setHtml(boolean enable) {
html = enable;
@@ -158,43 +164,46 @@ public class ANTLR extends Task {
public void setDiagnostic(boolean enable) {
diagnostic = enable;
}
/**
* Sets a flag to enable all tracing
* If true, enables all tracing.
*/
public void setTrace(boolean enable) {
trace = enable;
}
/**
* Sets a flag to enable parser tracing
* If true, enables parser tracing.
*/
public void setTraceParser(boolean enable) {
traceParser = enable;
}
/**
* Sets a flag to allow the user to enable lexer tracing
* If true, enables lexer tracing.
*/
public void setTraceLexer(boolean enable) {
traceLexer = enable;
}
/**
* Sets a flag to allow the user to enable tree walker tracing
*/
public void setTraceTreeWalker(boolean enable) {
traceTreeWalker = enable;
}
// we are forced to fork ANTLR since there is a call
// to System.exit() and there is nothing we can do
// right now to avoid this. :-( (SBa)
// I'm not removing this method to keep backward compatibility
/**
* @ant.attribute ignore="true"
*/
public void setFork(boolean s) {
//this.fork = s;
}
/**
* The working directory of the process
*/
@@ -203,15 +212,15 @@ public class ANTLR extends Task {
}

/**
* <code>&lt;classpath&gt;</code> allows classpath to be set
* because a directory might be given for Antlr debug...
* Adds a classpath to be set
* because a directory might be given for Antlr debug.
*/
public Path createClasspath() {
return commandline.createClasspath(project).createPath();
}

/**
* Create a new JVM argument. Ignored if no JVM is forked.
* Adds a new JVM argument.
* @return create a new JVM argument so that any argument can be passed to the JVM.
* @see #setFork(boolean)
*/
@@ -266,7 +275,7 @@ public class ANTLR extends Task {
if (target.lastModified() > getGeneratedFile().lastModified()) {
populateAttributes();
commandline.createArgument().setValue(target.toString());
log(commandline.describeCommand(), Project.MSG_VERBOSE);
int err = run(commandline.getCommandline());
if (err == 1) {
@@ -312,12 +321,12 @@ public class ANTLR extends Task {
if (target == null || !target.isFile()) {
throw new BuildException("Invalid target: " + target);
}
// validate the superGrammar file
if (superGrammar != null && !new File(superGrammar).isFile()) {
throw new BuildException("Invalid super grammar file: " + superGrammar);
}
// if no output directory is specified, used the target's directory
if (outputDirectory == null) {
String fileName = target.toString();


+ 2
- 0
src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java View File

@@ -66,6 +66,8 @@ import org.w3c.dom.Element;
import java.util.Enumeration;
import java.util.Hashtable;

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;

import java.io.ByteArrayOutputStream;


+ 19
- 26
src/main/org/apache/tools/ant/taskdefs/optional/IContract.java View File

@@ -77,12 +77,12 @@ import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;

/**
* Instruments Java classes with <a href="http://www.reliable-systems.com/tools/">iContract</a>
* DBC preprocessor.
* Instruments Java classes with iContract DBC preprocessor.
* <br/>
* The task can generate a properties file for <a href="http://hjem.sol.no/hellesoy/icontrol.html">iControl</a>,
* a graphical user interface that lets you turn on/off assertions. iControl generates a control file that you can refer to
* from this task using the controlfile attribute.
* iContract is at <a href="http://www.reliable-systems.com/tools/">http://www.reliable-systems.com/tools/</a>
* <p/>
* Thanks to Rainer Schmitz for enhancements and comments.
*
@@ -226,12 +226,6 @@ public class IContract extends MatchingTask {
private static final String ICONTROL_PROPERTIES_HEADER =
" You might want to set classRoot to point to your normal compilation class root directory.";

private static final String ICONTROL_PROPERTIES_MESSAGE =
"You should probably modify icontrol.properties' classRoot to where comiled (uninstrumented) classes go.";

/** \ on windows, / on linux/unix */
private static final String ps = System.getProperty("path.separator");

/** compiler to use for instrumenation */
private String icCompiler = "javac";

@@ -274,9 +268,6 @@ public class IContract extends MatchingTask {
/** The -q option */
private boolean quiet = false;

/** Indicates whether or not to use internal compilation */
private boolean internalcompilation = false;

/** The -m option */
private File controlFile = null;

@@ -305,9 +296,8 @@ public class IContract extends MatchingTask {
/** Regular compilation class root */
private File classDir = null;


/**
* Sets the source directory
* Sets the source directory.
*
* @param srcDir the source directory
*/
@@ -317,9 +307,9 @@ public class IContract extends MatchingTask {


/**
* Sets the class directory (uninstrumented classes)
* Sets the class directory (uninstrumented classes).
*
* @param srcDir the source directory
* @param classDir the source directory
*/
public void setClassdir(File classDir) {
this.classDir = classDir;
@@ -327,7 +317,7 @@ public class IContract extends MatchingTask {


/**
* Sets the instrumentation directory
* Sets the instrumentation directory.
*
* @param instrumentDir the source directory
*/
@@ -340,7 +330,7 @@ public class IContract extends MatchingTask {


/**
* Sets the build directory for instrumented classes
* Sets the build directory for instrumented classes.
*
* @param buildDir the build directory
*/
@@ -350,7 +340,7 @@ public class IContract extends MatchingTask {


/**
* Sets the build directory for repository classes
* Sets the build directory for repository classes.
*
* @param repositoryDir the source directory
*/
@@ -363,9 +353,9 @@ public class IContract extends MatchingTask {


/**
* Sets the build directory for instrumented classes
* Sets the build directory for instrumented classes.
*
* @param buildDir the build directory
* @param repBuildDir the build directory
*/
public void setRepbuilddir(File repBuildDir) {
this.repBuildDir = repBuildDir;
@@ -373,7 +363,7 @@ public class IContract extends MatchingTask {


/**
* Turns on/off precondition instrumentation
* Turns on/off precondition instrumentation.
*
* @param pre true turns it on
*/
@@ -384,7 +374,7 @@ public class IContract extends MatchingTask {


/**
* Turns on/off postcondition instrumentation
* Turns on/off postcondition instrumentation.
*
* @param post true turns it on
*/
@@ -395,7 +385,7 @@ public class IContract extends MatchingTask {


/**
* Turns on/off invariant instrumentation
* Turns on/off invariant instrumentation.
*
* @param invariant true turns it on
*/
@@ -406,7 +396,7 @@ public class IContract extends MatchingTask {


/**
* Sets the Throwable (Exception) to be thrown on assertion violation
* Sets the Throwable (Exception) to be thrown on assertion violation.
*
* @param clazz the fully qualified Throwable class name
*/
@@ -474,9 +464,12 @@ public class IContract extends MatchingTask {


/**
* Creates a nested classpath element
* Sets the classpath.
*
* @return the nested classpath element
* @todo this overwrites the classpath so only one
* effective classpath element would work. This
* is not how we do this elsewhere.
*/
public Path createClasspath() {
if (classpath == null) {
@@ -497,7 +490,7 @@ public class IContract extends MatchingTask {


/**
* Decides whether or not to update iControl properties file
* If true, updates iControl properties file
*
* @param updateIcontrol true if iControl properties file should be
* updated


+ 36
- 9
src/main/org/apache/tools/ant/taskdefs/optional/Javah.java View File

@@ -71,8 +71,9 @@ import java.util.StringTokenizer;
import java.util.Enumeration;

/**
* Task to generate JNI header files using javah. This task can take the following
* arguments:
* Generates JNI header files using javah.
*
* This task can take the following arguments:
* <ul>
* <li>classname - the fully-qualified name of a class</li>
* <li>outputFile - Concatenates the resulting header or source files for all
@@ -118,10 +119,16 @@ public class Javah extends Task {
//private Path extdirs;
private static String lSep = System.getProperty("line.separator");

/**
* the fully-qualified name of the class (or classes, separated by commas).
*/
public void setClass(String cls) {
this.cls = cls;
}

/**
* Adds class to process.
*/
public ClassArgument createClass() {
ClassArgument ga = new ClassArgument();
classes.addElement(ga);
@@ -152,6 +159,9 @@ public class Javah extends Task {
this.destDir = destDir;
}

/**
* the classpath to use.
*/
public void setClasspath(Path src) {
if (classpath == null) {
classpath = src;
@@ -159,6 +169,10 @@ public class Javah extends Task {
classpath.append(src);
}
}

/**
* Path to use for classpath.
*/
public Path createClasspath() {
if (classpath == null) {
classpath = new Path(project);
@@ -167,12 +181,16 @@ public class Javah extends Task {
}

/**
* Adds a reference to a CLASSPATH defined elsewhere.
* Adds a reference to a classpath defined elsewhere.
* @todo this needs to be documented in the HTML docs
*/
public void setClasspathRef(Reference r) {
createClasspath().setRefid(r);
}

/**
* location of bootstrap class files.
*/
public void setBootclasspath(Path src) {
if (bootclasspath == null) {
bootclasspath = src;
@@ -180,6 +198,10 @@ public class Javah extends Task {
bootclasspath.append(src);
}
}

/**
* Adds path to bootstrap class files.
*/
public Path createBootclasspath() {
if (bootclasspath == null) {
bootclasspath = new Path(project);
@@ -188,7 +210,8 @@ public class Javah extends Task {
}

/**
* Adds a reference to a CLASSPATH defined elsewhere.
* Adds a reference to a classpath defined elsewhere.
* @todo this needs to be documented in the HTML
*/
public void setBootClasspathRef(Reference r) {
createBootclasspath().setRefid(r);
@@ -217,35 +240,39 @@ public class Javah extends Task {
//}

/**
* Set the output file name.
* Concatenates the resulting header or source files for all
* the classes listed into this file.
*/
public void setOutputFile(File outputFile) {
this.outputFile = outputFile;
}

/**
* Set the force-write flag.
* If true, output files should always be written (JDK1.2 only).
*/
public void setForce(boolean force) {
this.force = force;
}

/**
* Set the old flag.
* If true, specifies that old JDK1.0-style header files should be
* generated.
* (otherwise output file contain JNI-style native method function prototypes) (JDK1.2 only)
*/
public void setOld(boolean old) {
this.old = old;
}

/**
* Set the stubs flag.
* If true, generate C declarations from the Java object file (used with old).
*/
public void setStubs(boolean stubs) {
this.stubs = stubs;
}

/**
* Set the verbose flag.
* If true, causes Javah to print a message concerning
* the status of the generated files.
*/
public void setVerbose(boolean verbose) {
this.verbose = verbose;


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java View File

@@ -67,7 +67,7 @@ import org.apache.tools.ant.util.SourceFileScanner;
import java.io.File;

/**
* Convert files from native encodings to ascii.
* Converts files from native encodings to ASCII.
*
* @author <a href="asudell@acm.org">Drew Sudell</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>


+ 4
- 4
src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java View File

@@ -73,7 +73,8 @@ import org.apache.tools.ant.taskdefs.MatchingTask;
import org.apache.tools.ant.types.EnumeratedAttribute;

/**
* Task to compile NetRexx source files. This task can take the following
* Compiles NetRexx source files.
* This task can take the following
* arguments:
* <ul>
* <li>binary</li>
@@ -517,9 +518,8 @@ public class NetRexxC extends MatchingTask {


/**
* Whether the task should suppress the "FooException is in SIGNALS list
* but is not signalled within the method", which is sometimes rather
* useless. The warning is logged as verbose message, though.
* Tells whether we should filter out any deprecation-messages
* of the compiler out.
*/
public void setSuppressDeprecation(boolean suppressDeprecation) {
this.suppressDeprecation = suppressDeprecation;


+ 55
- 7
src/main/org/apache/tools/ant/taskdefs/optional/PropertyFile.java View File

@@ -78,10 +78,9 @@ import java.text.ParseException;
import java.text.DecimalFormat;

/**
*PropertyFile task uses java.util.Properties to modify integer, String and
*Date settings in a property file.<p>
*
*Modifies settings in a property file.
*
* <p>
*The following is an example of its usage:
* <ul>&lt;target name="setState"&gt;<br>
* <ul>&lt;property<br>
@@ -240,10 +239,16 @@ public class PropertyFile extends Task {
}
}

/**
* Location of the property file to be edited; required.
*/
public void setFile(File file) {
propertyfile = file;
}

/**
* optional header comment for the file
*/
public void setComment(String hdr) {
comment = hdr;
}
@@ -280,8 +285,9 @@ public class PropertyFile extends Task {
}
}

/*
/**
* Returns whether the given parameter has been defined.
* @todo IDEA is saying this method is never used - remove?
*/
private boolean checkParam(String param) {
return !((param == null) || (param.equals("null")));
@@ -308,27 +314,69 @@ public class PropertyFile extends Task {
private String pattern = null;
private int field = Calendar.DATE;

/**
* Name of the property name/value pair
*/
public void setKey(String value) {
this.key = value;
}
/**
* Value to set (=), to add (+) or subtract (-)
*/
public void setValue(String value) {
this.value = value;
}
/**
* operation to apply.
* &quot;+&quot; or &quot;=&quot;
*(default) for all datatypes; &quot;-&quot; for date and int only)\.
*/
public void setOperation(Operation value) {
this.operation = Operation.toOperation(value.getValue());
}
/**
* Regard the value as : int, date or string (default)
*/
public void setType(Type value) {
this.type = Type.toType(value.getValue());
}
/**
* Initial value to set for a property if it is not
* already defined in the property file.
* For type date, an additional keyword is allowed: &quot;now&quot;
*/
public void setDefault(String value) {
this.defaultValue = value;
}
/**
* For int and date type only. If present, Values will
* be parsed and formatted accordingly.
*/
public void setPattern(String value) {
this.pattern = value;
}
/**
* @since 1.15, Ant 1.5
* The unit of the value to be applied to date +/- operations.
* Valid Values are:
* <ul>
* <li>millisecond</li>
* <li>second</li>
* <li>minute</li>
* <li>hour</li>
* <li>day (default)</li>
* <li>week</li>
* <li>month</li>
* <li>year</li>
* </ul>
* This only applies to date types using a +/- operation.
* @since Ant 1.5
*/
public void setUnit(PropertyFile.Unit unit) {
field = unit.getCalendarField();
@@ -598,8 +646,8 @@ public class PropertyFile extends Task {
/**
* Borrowed from Tstamp
*
* @since 1.15, Ant 1.5
* @todo share all this time stuff across many tasks as a datetime datatype
* @since Ant 1.5
*/
public static class Unit extends EnumeratedAttribute {



+ 7
- 2
src/main/org/apache/tools/ant/taskdefs/optional/RenameExtensions.java View File

@@ -97,12 +97,17 @@ public class RenameExtensions extends MatchingTask {
globType.setValue("glob");
}

/** store fromExtension **/
/**
* The string that files must end in to be renamed
**/
public void setFromExtension(String from) {
fromExtension = from;
}

/** store toExtension **/
/**
* The string that renamed files will end with on
* completion
*/
public void setToExtension(String to) {
toExtension = to;
}


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save