git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273081 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -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 | |||||
| @@ -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 | |||||
| @@ -54,7 +54,7 @@ | |||||
| Documentation is available in HTML format, in the docs/ directory. | Documentation is available in HTML format, in the docs/ directory. | ||||
| For information about building and installing Ant, see | For information about building and installing Ant, see | ||||
| docs/manual/index.html | |||||
| docs/manual/index.html | |||||
| Licensing | Licensing | ||||
| @@ -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. | * <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: | 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: | Changes that could break older environments: | ||||
| -------------------------------------------- | -------------------------------------------- | ||||
| <<<<<<< WHATSNEW | |||||
| * Important: Single $ signs are no longer silently stripped! | * 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 | * Project.getBuildListeners now returns a clone of the listener | ||||
| list. Changes to the returned list will not affect the listeners | list. Changes to the returned list will not affect the listeners | ||||
| currently attached to the Project. It also means that it is safe to | 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 | written to the logfile specified via -logfile as they might destroy | ||||
| the format of the file for special BuildLoggers (like XmlLogger). | 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: | Fixed bugs: | ||||
| ----------- | ----------- | ||||
| @@ -431,7 +752,7 @@ Other changes: | |||||
| * <ejbjar> now allows control over which additional classes and interfaces | * <ejbjar> now allows control over which additional classes and interfaces | ||||
| are added to the generated EJB jars. A new attribute "dependency" can be | 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 | 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 | 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 | 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>, | * New tasks <replaceregexp>, <checksum>, <translate>, <waitfor>, | ||||
| <manifest>, <vsscp>, <vssadd>, <vsscreate>, <splash>, <basename>, <dirname>, | <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 | * A new combined <mail> task, which replaces the old <mail> and | ||||
| <mimemail> tasks, has been added. The <mimemail> task, and | <mimemail> tasks, has been added. The <mimemail> task, and | ||||
| @@ -27,6 +27,7 @@ | |||||
| <property name="chmod.fail" value="true" /> | <property name="chmod.fail" value="true" /> | ||||
| <property name="deprecation" value="false" /> | <property name="deprecation" value="false" /> | ||||
| <property name="optimize" value="true" /> | <property name="optimize" value="true" /> | ||||
| <property name="javac.target" value="1.1" /> | |||||
| <property name="junit.fork" value="false" /> | <property name="junit.fork" value="false" /> | ||||
| <property name="junit.filtertrace" value="off"/> | <property name="junit.filtertrace" value="off"/> | ||||
| <property name="junit.summary" value="no"/> | <property name="junit.summary" value="no"/> | ||||
| @@ -135,6 +136,10 @@ | |||||
| unless="jdk1.2+" /> | unless="jdk1.2+" /> | ||||
| <exclude name="${optional.package}/ejb/IPlanet*.java" | <exclude name="${optional.package}/ejb/IPlanet*.java" | ||||
| unless="jdk1.2+" /> | 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 --> | <!-- uses the context classloader --> | ||||
| <exclude name="${optional.package}/junit/JUnitClassLoaderTest.java" | <exclude name="${optional.package}/junit/JUnitClassLoaderTest.java" | ||||
| unless="jdk1.2+" /> | unless="jdk1.2+" /> | ||||
| @@ -307,6 +312,20 @@ | |||||
| <exclude name="${ant.package}/types/XMLCatalogTest.java"/> | <exclude name="${ant.package}/types/XMLCatalogTest.java"/> | ||||
| </patternset> | </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 | Set up a patternsets that matches the parts of our JUnit testsuite | ||||
| @@ -559,6 +578,7 @@ | |||||
| destdir="${build.classes}" | destdir="${build.classes}" | ||||
| debug="${debug}" | debug="${debug}" | ||||
| deprecation="${deprecation}" | deprecation="${deprecation}" | ||||
| target="${javac.target}" | |||||
| optimize="${optimize}" > | optimize="${optimize}" > | ||||
| <classpath refid="classpath" /> | <classpath refid="classpath" /> | ||||
| @@ -635,6 +655,8 @@ | |||||
| <fileset dir="."> | <fileset dir="."> | ||||
| <include name="LICENSE" /> | <include name="LICENSE" /> | ||||
| <include name="LICENSE.xerces" /> | <include name="LICENSE.xerces" /> | ||||
| <include name="LICENSE.dom" /> | |||||
| <include name="LICENSE.sax" /> | |||||
| </fileset> | </fileset> | ||||
| <mapper type="glob" from="*" to="*.txt" /> | <mapper type="glob" from="*" to="*.txt" /> | ||||
| </copy> | </copy> | ||||
| @@ -656,7 +678,7 @@ | |||||
| <metainf dir="${build.dir}" includes="LICENSE.txt"/> | <metainf dir="${build.dir}" includes="LICENSE.txt"/> | ||||
| <manifest> | <manifest> | ||||
| <section name="${ant.package}"> | |||||
| <section name="${ant.package}/"> | |||||
| <attribute name="Extension-name" | <attribute name="Extension-name" | ||||
| value="org.apache.tools.ant" /> | value="org.apache.tools.ant" /> | ||||
| <attribute name="Specification-Title" | <attribute name="Specification-Title" | ||||
| @@ -696,7 +718,7 @@ | |||||
| <metainf dir="${build.dir}" includes="LICENSE.txt"/> | <metainf dir="${build.dir}" includes="LICENSE.txt"/> | ||||
| <manifest> | <manifest> | ||||
| <section name="${optional.package}"> | |||||
| <section name="${optional.package}/"> | |||||
| <attribute name="Extension-name" | <attribute name="Extension-name" | ||||
| value="org.apache.tools.ant.taskdefs.optional" /> | value="org.apache.tools.ant.taskdefs.optional" /> | ||||
| <attribute name="Specification-Title" | <attribute name="Specification-Title" | ||||
| @@ -817,9 +839,12 @@ | |||||
| <include name="README"/> | <include name="README"/> | ||||
| <include name="LICENSE"/> | <include name="LICENSE"/> | ||||
| <include name="LICENSE.xerces"/> | <include name="LICENSE.xerces"/> | ||||
| <include name="LICENSE.dom"/> | |||||
| <include name="LICENSE.sax"/> | |||||
| <include name="TODO"/> | <include name="TODO"/> | ||||
| <include name="WHATSNEW"/> | <include name="WHATSNEW"/> | ||||
| <include name="KEYS"/> | <include name="KEYS"/> | ||||
| <include name="welcome.html"/> | |||||
| </fileset> | </fileset> | ||||
| </copy> | </copy> | ||||
| @@ -901,6 +926,8 @@ | |||||
| <include name="README"/> | <include name="README"/> | ||||
| <include name="LICENSE"/> | <include name="LICENSE"/> | ||||
| <include name="LICENSE.xerces"/> | <include name="LICENSE.xerces"/> | ||||
| <include name="LICENSE.dom"/> | |||||
| <include name="LICENSE.sax"/> | |||||
| <include name="TODO"/> | <include name="TODO"/> | ||||
| <include name="WHATSNEW"/> | <include name="WHATSNEW"/> | ||||
| <include name="KEYS"/> | <include name="KEYS"/> | ||||
| @@ -909,6 +936,7 @@ | |||||
| <include name="bootstrap.bat"/> | <include name="bootstrap.bat"/> | ||||
| <include name="bootstrap.sh"/> | <include name="bootstrap.sh"/> | ||||
| <include name="build.xml"/> | <include name="build.xml"/> | ||||
| <include name="welcome.html"/> | |||||
| </fileset> | </fileset> | ||||
| </copy> | </copy> | ||||
| @@ -1147,6 +1175,7 @@ | |||||
| <javac srcdir="${tests.dir}" | <javac srcdir="${tests.dir}" | ||||
| destdir="${build.tests}" | destdir="${build.tests}" | ||||
| debug="${debug}" | debug="${debug}" | ||||
| target="${javac.target}" | |||||
| deprecation="${deprecation}" > | deprecation="${deprecation}" > | ||||
| <classpath refid="tests-classpath" /> | <classpath refid="tests-classpath" /> | ||||
| @@ -35,13 +35,13 @@ development, maintenance and code size reasons. | |||||
| Execute will spawn off separate programs under all the platforms which | Execute will spawn off separate programs under all the platforms which | ||||
| ant supports, dealing with Java version issues as well as platform | 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> | <h4>Java, ExecuteJava</h4> | ||||
| These classes can be used to spawn Java programs in a separate VM (they | 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. | 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 | accidentally inserting them | ||||
| <h2>Attributes and elements</h2> | <h2>Attributes and elements</h2> | ||||
| Use the Ant introspection based mapping of attributes into Java datatypes, | Use the Ant introspection based mapping of attributes into Java datatypes, | ||||
| rather than implementing all your attributes as setFoo(String) and doing | 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, | 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> | <p> | ||||
| The ant1.x tasks are very inconsistent regarding naming of attributes | 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> | <table> | ||||
| <tr> | <tr> | ||||
| @@ -102,7 +101,7 @@ Here is a list of preferred attribute names. | |||||
| failonerror | failonerror | ||||
| </td> | </td> | ||||
| <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. | <tt>BuildException</tt> or just print an error. | ||||
| Parameter validation failures should always throw an error, regardless | Parameter validation failures should always throw an error, regardless | ||||
| of this flag | of this flag | ||||
| @@ -156,32 +155,32 @@ to their ant system configuration. | |||||
| Keep member variables private. If read access by subclasses is required. | Keep member variables private. If read access by subclasses is required. | ||||
| add accessor methods rather than change the accessiblity of the member. | add accessor methods rather than change the accessiblity of the member. | ||||
| This enables subclasses to access the contents, yet | This enables subclasses to access the contents, yet | ||||
| still be decoupled from the actual implementation. | |||||
| still be decoupled from the actual implementation. | |||||
| <p> | <p> | ||||
| The other common re-use mechanism in ant is for one task to create and | 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> | <h2>Do your own Dependency Checking</h2> | ||||
| Make has the edge over Ant in its integrated dependency checking: the | 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 | 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 | 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. | 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 | 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. | 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 | 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 | 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> | <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 | 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 -<touch> | functionality of tasks have to degrade in that environment -<touch> | ||||
| 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. | such behaviour change must always be noted in the documentation. | ||||
| <p> | <p> | ||||
| What is problematic is code which is dependent on Java1.2 features | 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 | 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 | 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 | 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> | <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. | Better still, use reflection to link to the classes at run time. | ||||
| <p> | <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 | <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, | 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 | 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> | 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> | <p> | ||||
| A well written set of test cases will break the Ant task while it is in | 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, | surfaces later should have a test case added to demonstrate the problem, | ||||
| and to fix it. | 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 | credibility significantly. To be precise, we hate submissions without | ||||
| test cases, as it means we have to write them ourselves. This is | 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 | 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> | <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 | programs, as you are just executing them at this point, not linking to | ||||
| them. | them. | ||||
| <p> | <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 | still point to where you host it -just submit a diff to | ||||
| xdocs/external.html pointing to your task. | 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 | 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 | 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 | source updates, look at manual changes and subscribe to the ant-dev | ||||
| mailing list. | |||||
| mailing list. | |||||
| <p> | <p> | ||||
| If you are thinking of writing a task, posting a note on your thoughts | 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 | 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 | maybe some half written task to do the basics, all without writing a | ||||
| line of code. | |||||
| line of code. | |||||
| <h2>Submitting to Ant</h2> | <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. | any debate about your own submission. | ||||
| <p> | <p> | ||||
| Patches to existing files should be generated with | |||||
| Patches to existing files should be generated with | |||||
| <code>cvs diff -u filename</code> | <code>cvs diff -u filename</code> | ||||
| and save the output to a file. If you want to get | 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 | 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 | New submissions should be proceeded with [SUBMIT]. The mailer-daemon | ||||
| will reject any messages over 100KB, so any large update should be | 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 | zipped up. If your submission is bigger than that, why not break it up | ||||
| into separate tasks. | |||||
| into separate tasks. | |||||
| <p> | <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 | <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 | dont get lost. Please submit them by first filing the report with a | ||||
| meaningful name, then adding files as attachments. Use CVS diff files | meaningful name, then adding files as attachments. Use CVS diff files | ||||
| please! | please! | ||||
| <p> | <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. | 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 | the product. At that time anything other than bug fixes will tend | ||||
| to be neglected. | to be neglected. | ||||
| <h2>Checklists</h2> | <h2>Checklists</h2> | ||||
| These are the things you should verify before submitting patches and new | 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 | everything including the documentation and some test cases will have | ||||
| been done, so by getting them out the way up front can save time. | 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 | 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> | <h3>Checklist before submitting a patch</h3> | ||||
| <ul> | <ul> | ||||
| <li>Added code complies with style guidelines | <li>Added code complies with style guidelines | ||||
| <li>Code compiles and runs on Java1.1 | <li>Code compiles and runs on Java1.1 | ||||
| <li>New member variables are private, and provide public accessor methods | <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>Existing test cases succeed. | ||||
| <li>New test cases written and succeed. | <li>New test cases written and succeed. | ||||
| <li>Documentation page extended as appropriate. | <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 | <li>Message to ant-dev contains [PATCH], task name and patch reason in | ||||
| subject. | subject. | ||||
| <li>Message body contains a rationale for the patch. | <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> | </ul> | ||||
| <h3>Checklist before submitting a new task</h3> | <h3>Checklist before submitting a new task</h3> | ||||
| @@ -427,7 +426,7 @@ subject. | |||||
| <li>Source code complies with style guidelines | <li>Source code complies with style guidelines | ||||
| <li>Code compiles and runs on Java1.1 | <li>Code compiles and runs on Java1.1 | ||||
| <li>Member variables are private, and provide public accessor methods | <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><i>Maybe</i> Task has failonerror attribute to control failure behaviour | ||||
| <li>New test cases written and succeed | <li>New test cases written and succeed | ||||
| <li>Documentation page written | <li>Documentation page written | ||||
| @@ -51,7 +51,7 @@ | |||||
| <td valign="top">append</td> | <td valign="top">append</td> | ||||
| <td valign="top"> | <td valign="top"> | ||||
| Specifies whether or not the file specified by 'destfile' | Specifies whether or not the file specified by 'destfile' | ||||
| should be overwritten. Defaults to "yes". | |||||
| should be overwritten. Defaults to "no". | |||||
| </td> | </td> | ||||
| <td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
| </tr> | </tr> | ||||
| @@ -170,6 +170,13 @@ of 400 or greater are viewed as invalid.</p> | |||||
| are detected</td> | are detected</td> | ||||
| <td align="center">No</td> | <td align="center">No</td> | ||||
| </tr> | </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> | </table> | ||||
| <h4>socket</h4> | <h4>socket</h4> | ||||
| @@ -263,8 +270,8 @@ that is "true","yes", or "on"</p> | |||||
| <pre> | <pre> | ||||
| <istrue value="${someproperty}" /> | <istrue value="${someproperty}" /> | ||||
| <istrue value="false" /> | <istrue value="false" /> | ||||
| </pre> | |||||
| </pre> | |||||
| <h4>isfalse</h4> | <h4>isfalse</h4> | ||||
| <p>Tests whether a string is not true, the negation of <istrue> | <p>Tests whether a string is not true, the negation of <istrue> | ||||
| </p> | </p> | ||||
| @@ -283,8 +290,8 @@ that is "true","yes", or "on"</p> | |||||
| <pre> | <pre> | ||||
| <isfalse value="${someproperty}" /> | <isfalse value="${someproperty}" /> | ||||
| <isfalse value="false" /> | <isfalse value="false" /> | ||||
| </pre> | |||||
| </pre> | |||||
| <hr> | <hr> | ||||
| <p align="center">Copyright © 2001-2002 Apache Software | <p align="center">Copyright © 2001-2002 Apache Software | ||||
| Foundation. All rights Reserved.</p> | Foundation. All rights Reserved.</p> | ||||
| @@ -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 | The extended fileset and groupfileset attributes from the zip task are | ||||
| also available in the jar task. | also available in the jar task. | ||||
| See the <a href="zip.html">Zip</a> task for more details and examples.</p> | 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 | <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 | 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 | 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">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> | <td valign="top" align="center">No</td> | ||||
| </tr> | </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 "skip", | |||||
| "merge", and "mergewithoutmain". "merge" | |||||
| will merge all of manifests together, and merge this into any other | |||||
| specified manifests. "mergewithoutmain" merges everything | |||||
| but the Main section of the manifests. Default value is "skip". | |||||
| <b>Note:</b> if this attribute's value is not "skip", the | |||||
| created jar will not be readable by using java.util.jar.JarInputStream | |||||
| </td> | |||||
| <td valign="top" align="center">No</td> | |||||
| </tr> | |||||
| <tr> | <tr> | ||||
| <td valign="top">update</td> | <td valign="top">update</td> | ||||
| <td valign="top">indicates whether to update or overwrite | <td valign="top">indicates whether to update or overwrite | ||||
| @@ -72,6 +72,11 @@ drive letters to Unix paths, and vice-versa.</p> | |||||
| <td valign="top" align="center">No; if omitted, a nested | <td valign="top" align="center">No; if omitted, a nested | ||||
| <code><path></code> element must be supplied.</td> | <code><path></code> element must be supplied.</td> | ||||
| </tr> | </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 "true". | |||||
| </tr> | |||||
| </table> | </table> | ||||
| <h3>Parameters specified as nested elements</h3> | <h3>Parameters specified as nested elements</h3> | ||||
| <h4>map</h4> | <h4>map</h4> | ||||
| @@ -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 | want to use default exclusions or not. See the section on <a | ||||
| href="../dirtasks.html#directorybasedtasks">directory based tasks</a>, on how the | href="../dirtasks.html#directorybasedtasks">directory based tasks</a>, on how the | ||||
| inclusion/exclusion of files works, and how to write patterns.</p> | 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><fileset></code> (<code>dir</code> becomes <code>basedir</code>) | |||||
| as well as the nested <code><include></code>, <code><exclude></code> | |||||
| <p>This task forms an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and supports all | |||||
| attributes of <code><fileset></code> (<code>dir</code> becomes <code>basedir</code>) | |||||
| as well as the nested <code><include></code>, <code><exclude></code> | |||||
| and <code><patternset></code> elements.</p> | and <code><patternset></code> elements.</p> | ||||
| <p>This task supports the use of a nested <param> element which is used to pass values | |||||
| <p>This task supports the use of a nested <param> element which is used to pass values | |||||
| to an <xsl:param> declaration.</p> | to an <xsl:param> 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> | element which is used to perform Entity and URI resolution</p> | ||||
| <p><i><style> and <xslt> refer to the same Ant task and can be used interchangeably.</i></p> | <p><i><style> and <xslt> 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> | <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> | ||||
| <tr> | <tr> | ||||
| <td valign="top">extension</td> | <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 ".html".</td> | specified, the default is ".html".</td> | ||||
| <td align="center" valign="top">No</td> | <td align="center" valign="top">No</td> | ||||
| </tr> | </tr> | ||||
| @@ -68,7 +68,7 @@ element which is used to perform Entity and URI resolution</p> | |||||
| <td align="center" valign="top">Yes</td> | <td align="center" valign="top">Yes</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">classpath</td> | |||||
| <td valign="top">classpath</td> | |||||
| <td valign="top">the classpath to use when looking up the XSLT | <td valign="top">the classpath to use when looking up the XSLT | ||||
| processor.</td> | processor.</td> | ||||
| <td align="center" valign="top">No</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">processor</td> | ||||
| <td valign="top">name of the XSLT processor to use. Permissible values are | <td valign="top">name of the XSLT processor to use. Permissible values are | ||||
| "trax" for a TraX compliant processor, | |||||
| "trax" for a TraX compliant processor (ie JAXP interface | |||||
| implementation such as Xalan 2 or Saxon), | |||||
| "xslp" for the XSL:P processor, "xalan" for | "xslp" for the XSL:P processor, "xalan" for | ||||
| the Apache XML Xalan (version 1) processor the name of an | the Apache XML Xalan (version 1) processor the name of an | ||||
| arbitrary XSLTLiaison class. Defaults to trax, followed by xalan | arbitrary XSLTLiaison class. Defaults to trax, followed by xalan | ||||
| and then xslp (in that order). The first one found in your class | and then xslp (in that order). The first one found in your class | ||||
| path is the one that is used. | 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> | ||||
| <td align="center" valign="top">No</td> | <td align="center" valign="top">No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">includes</td> | <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> | All files are included when omitted.</td> | ||||
| <td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">includesfile</td> | <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> | an include pattern</td> | ||||
| <td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">excludes</td> | <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> | No files (except default excludes) are excluded when omitted.</td> | ||||
| <td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">excludesfile</td> | <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> | an exclude pattern</td> | ||||
| <td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
| </tr> | </tr> | ||||
| @@ -133,23 +134,16 @@ element which is used to perform Entity and URI resolution</p> | |||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">in</td> | <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> | with the out attribute.</td> | ||||
| <td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">out</td> | <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> | in attribute.</td> | ||||
| <td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
| </tr> | </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> | <tr> | ||||
| <td valign="top">scanincludeddirectories</td> | <td valign="top">scanincludeddirectories</td> | ||||
| <td valign="top">If any directories are matched by the | <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> | <h3>Parameters specified as nested elements</h3> | ||||
| <h4>classpath</h4> | <h4>classpath</h4> | ||||
| <p>The classpath to load the processor from can be specified via a | <p>The classpath to load the processor from can be specified via a | ||||
| nested <code><classpath></code>, as well - that is, a | |||||
| nested <code><classpath></code>, as well - that is, a | |||||
| <a href="../using.html#path">path</a>-like structure.</p> | <a href="../using.html#path">path</a>-like structure.</p> | ||||
| <h4>xmlcatalog</h4> | <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> | element is used to perform Entity and URI resolution.</p> | ||||
| <h4>param</h4> | <h4>param</h4> | ||||
| <p>Param is used to pass a parameter to the XSL stylesheet.</p> | <p>Param is used to pass a parameter to the XSL stylesheet.</p> | ||||
| <h4>Parameters</h4> | <h4>Parameters</h4> | ||||
| <table width="60%" border="1" cellpadding="2" cellspacing="0"> | <table width="60%" border="1" cellpadding="2" cellspacing="0"> | ||||
| <tr> | |||||
| <tr> | |||||
| <td valign="top"><b>Attribute</b></td> | <td valign="top"><b>Attribute</b></td> | ||||
| <td valign="top"><b>Description</b></td> | <td valign="top"><b>Description</b></td> | ||||
| <td align="center" valign="top"><b>Required</b></td> | <td align="center" valign="top"><b>Required</b></td> | ||||
| </tr> | </tr> | ||||
| <tr> | |||||
| <tr> | |||||
| <td valign="top">name</td> | <td valign="top">name</td> | ||||
| <td valign="top">Name of the XSL parameter</td> | <td valign="top">Name of the XSL parameter</td> | ||||
| <td align="center" valign="top">Yes</td> | <td align="center" valign="top">Yes</td> | ||||
| </tr> | </tr> | ||||
| <tr> | |||||
| <tr> | |||||
| <td valign="top">expression</td> | <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> | value into the style sheet it needs to be escaped using single quotes.</td> | ||||
| <td align="center" valign="top">Yes</td> | <td align="center" valign="top">Yes</td> | ||||
| </tr> | </tr> | ||||
| </table> | </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> | <h3>Examples</h3> | ||||
| <blockquote> | <blockquote> | ||||
| <pre> | <pre> | ||||
| @@ -201,7 +221,7 @@ element is used to perform Entity and URI resolution.</p> | |||||
| <xslt basedir="doc" destdir="build/doc" | <xslt basedir="doc" destdir="build/doc" | ||||
| extension=".html" style="style/apache.xsl"> | extension=".html" style="style/apache.xsl"> | ||||
| <xmlcatalog> | <xmlcatalog> | ||||
| <dtd | |||||
| <dtd | |||||
| publicId="-//ArielPartners//DTD XML Article V1.0//EN" | publicId="-//ArielPartners//DTD XML Article V1.0//EN" | ||||
| location="com/arielpartners/knowledgebase/dtd/article.dtd"/> | location="com/arielpartners/knowledgebase/dtd/article.dtd"/> | ||||
| </xmlcatalog> | </xmlcatalog> | ||||
| @@ -216,6 +236,17 @@ element is used to perform Entity and URI resolution.</p> | |||||
| element <xsl:param name="date"/>, the variable | element <xsl:param name="date"/>, the variable | ||||
| <code>$date</code> will subsequently have the value 07-01-2000. | <code>$date</code> will subsequently have the value 07-01-2000. | ||||
| </p> | </p> | ||||
| <h4>Using output properties</h4> | |||||
| <pre><xslt in="doc.xml" out="build/doc/output.xml" | |||||
| style="style/apache.xsl"> | |||||
| <outputproperty name="method" value="xml";/> | |||||
| <outputproperty name="standalone" value="yes"/> | |||||
| <outputproperty name="encoding" value="iso8859_1"/> | |||||
| <outputproperty name="indent" value="yes"/> | |||||
| </xslt></pre> | |||||
| </blockquote> | </blockquote> | ||||
| <hr> | <hr> | ||||
| <p align="center">Copyright © 2000-2002 Apache Software Foundation. All rights | <p align="center">Copyright © 2000-2002 Apache Software Foundation. All rights | ||||
| @@ -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 | To Tool API'. Therefore builds containing VAJ tasks can also be executed | ||||
| from the command line (Kudos to Glenn McAllister for describing the | from the command line (Kudos to Glenn McAllister for describing the | ||||
| concept and providing source code at | 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>. | |||||
| <A href="http://www7.software.ibm.com/vad.nsf/Data/Document4366"> | |||||
| http://www7.software.ibm.com/vad.nsf/Data/Document4366</A>. | |||||
| <LI>It is possible to cancel a running build | <LI>It is possible to cancel a running build | ||||
| executed from the plugin | executed from the plugin | ||||
| @@ -125,14 +125,7 @@ workspace.</P> | |||||
| <td valign="top">version</TD> | <td valign="top">version</TD> | ||||
| <td valign="top">name of the requested version</TD> | <td valign="top">name of the requested version</TD> | ||||
| <td valign="top" align="middle">yes</TD></TR> | <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: | |||||
| <servername>:<port no>).<BR>If this | |||||
| attribute is set, the tasks will be executed on the specified tool | |||||
| server. </P></TD> | |||||
| <td valign="top" align="middle">no</TD></TR></TABLE> | |||||
| </TABLE> | |||||
| <h3>Example</H3> | <h3>Example</H3> | ||||
| <pre><vajload remote="localhost:32767"> | <pre><vajload remote="localhost:32767"> | ||||
| @@ -246,11 +239,11 @@ This example exports all packages in the VAJ project 'MyProject', except | |||||
| packages starting with 'test'. | packages starting with 'test'. | ||||
| <h3>Default Excludes</H3> | <h3>Default Excludes</H3> | ||||
| The default excludes are:<br> | 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> | </PRE> | ||||
| <hr> | <hr> | ||||
| <h2><a name="vajimport"></A>VAJImport</H2> | <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> | <td valign="top" align="middle">yes</TD></TR> | ||||
| <tr> | <tr> | ||||
| <td valign="top">importSources</TD> | <td valign="top">importSources</TD> | ||||
| <td valign="top">export source files (default: | |||||
| <td valign="top">import source files (default: | |||||
| "yes")</TD> | "yes")</TD> | ||||
| <td valign="top" align="middle">no</TD></TR> | <td valign="top" align="middle">no</TD></TR> | ||||
| <tr valign="top"> | <tr valign="top"> | ||||
| <td valign="top">importResources</TD> | <td valign="top">importResources</TD> | ||||
| <td valign="top">export resource files (default: | |||||
| <td valign="top">import resource files (default: | |||||
| "yes")</TD> | "yes")</TD> | ||||
| <td valign="top" align="middle">no</TD></TR> | <td valign="top" align="middle">no</TD></TR> | ||||
| <tr valign="top"> | <tr valign="top"> | ||||
| <td valign="top">importClasses</TD> | <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> | <td valign="top" align="middle">no</TD></TR> | ||||
| <tr> | <tr> | ||||
| <td valign="top">remote</TD> | <td valign="top">remote</TD> | ||||
| @@ -369,8 +362,8 @@ install directory. If You have installed it elsewhere, adapt the pathes below. | |||||
| For | For | ||||
| a good introduction into the VAJ Remote Tool Access see the | a good introduction into the VAJ Remote Tool Access see the | ||||
| great introduction from Glenn McAllister at | 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>. It | |||||
| <A href="http://www7.software.ibm.com/vad.nsf/Data/Document4366"> | |||||
| http://www7.software.ibm.com/vad.nsf/Data/Document4366</A>. It | |||||
| is highly recommended to read this article before doing the installation (to | is highly recommended to read this article before doing the installation (to | ||||
| understand what you do :-) ). | understand what you do :-) ). | ||||
| <LI>insert the following lines into | <LI>insert the following lines into | ||||
| @@ -169,6 +169,13 @@ or are out of date, the ejbc tool is run to generate new versions.</p> | |||||
| processed.</td> | processed.</td> | ||||
| <td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
| </tr> | </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> | </table> | ||||
| <h3>Examples</h3> | <h3>Examples</h3> | ||||
| <pre><ejbc descriptors="${gen.classes}" | <pre><ejbc descriptors="${gen.classes}" | ||||
| @@ -323,7 +330,7 @@ and hence ant, will not complete until the weblogic instance is stopped.</p> | |||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">BEA Home</td> | <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 | If this attribute is present, wlrun assumes that the server will | ||||
| be running under Weblogic 6.0</td> | be running under Weblogic 6.0</td> | ||||
| <td valign="top" align="center">N/A</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> | <td valign="top" align="center">No</td> | ||||
| </tr> | </tr> | ||||
| <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> | ||||
| <td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
| </tr> | </tr> | ||||
| @@ -473,7 +480,7 @@ specify the BEA Home to have this task work correctly under 6.0</p> | |||||
| <tr> | <tr> | ||||
| <td valign="top">classpath</td> | <td valign="top">classpath</td> | ||||
| <td valign="top">The classpath to be used with the Java Virtual Machine that runs the Weblogic | <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> | <td valign="top" align="center">Yes</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| @@ -502,7 +509,7 @@ specify the BEA Home to have this task work correctly under 6.0</p> | |||||
| <h3>Nested Element</h3> | <h3>Nested Element</h3> | ||||
| <p>The classpath of the welstop task can be set by a <classpath> nested element.</p> | |||||
| <p>The classpath of the wlstop task can be set by a <classpath> nested element.</p> | |||||
| <h3>Examples</h3> | <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 | the weblogic class hierarchy. This should not be necessary if you | ||||
| have weblogic in your classpath. If you do not, you should use a | have weblogic in your classpath. If you do not, you should use a | ||||
| nested <dtd> element, described above. If you do choose | nested <dtd> 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 <dtd> element. | |||||
| </td> | </td> | ||||
| <td valign="top" align="center">No.</td> | <td valign="top" align="center">No.</td> | ||||
| </tr> | </tr> | ||||
| @@ -1071,7 +1078,7 @@ define this as META-INF/Customer-weblogic-cmp-rdbms-jar.xml.</p> | |||||
| <tr> | <tr> | ||||
| <td valign="top">outputdir</td> | <td valign="top">outputdir</td> | ||||
| <td valign="top">If set ejbc will be given this directory as the output | <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 "exploded" jars. | generation of "exploded" jars. | ||||
| </td> | </td> | ||||
| <td valign="top" align="center">No.</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> | <td valign="top" align="center">No, defaults to false</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">alwaysrebuild</td> | |||||
| <td valign="top">rebuild</td> | |||||
| <td valign="top">This controls whether ejbdeploy is called although no changes | <td valign="top">This controls whether ejbdeploy is called although no changes | ||||
| have occurred.</td> | have occurred.</td> | ||||
| <td valign="top" align="center">No, defaults to false</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>SQL92</li> <li>SQL99</li> <li>DB2UDBWIN_V71</li> | ||||
| <li>DB2UDBOS390_V6</li> <li>DB2UDBAS400_V4R5</li> <li>ORACLE_V8</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>INFORMIX_V92</li> <li>SYBASE_V1192</li> <li>MYSQL_V323</li> | ||||
| <li>MSSQLSERVER_V7</li> | |||||
| </ul> | </ul> | ||||
| This is also used to determine the name of the Map.mapxmi and | This is also used to determine the name of the Map.mapxmi and | ||||
| Schema.dbxmi files, for example Account-DB2UDBWIN_V71-Map.mapxmi | Schema.dbxmi files, for example Account-DB2UDBWIN_V71-Map.mapxmi | ||||
| @@ -1623,6 +1631,7 @@ documentation for more details.</p> | |||||
| <tr> | <tr> | ||||
| <td valign="Top">verbose</td> | <td valign="Top">verbose</td> | ||||
| <td valign="Top">Indicates whether or not to use -verbose switch. If | <td valign="Top">Indicates whether or not to use -verbose switch. If | ||||
| omitted, it defaults to <code>false</code>.</td> | omitted, it defaults to <code>false</code>.</td> | ||||
| <td align="Center" valign="Top">No</td> | <td align="Center" valign="Top">No</td> | ||||
| </tr> | </tr> | ||||
| @@ -54,65 +54,57 @@ Perform code covering functions by comparing source code line execution to the p | |||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">home</td> | <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> | <td align="center" valign="top">Yes</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">vm</td> | <td valign="top">vm</td> | ||||
| <td valign="top"> | <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> | <td align="center" valign="top">No, default to embedded VM if 1.2+</td> | ||||
| </tr> | </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> | <tr> | ||||
| <td valign="top">javaexe</td> | <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> | ||||
| <tr> | <tr> | ||||
| <td valign="top">applet</td> | <td valign="top">applet</td> | ||||
| <td valign="top">Run an applet. The default is false, unless the file under | <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> | <td align="center" valign="top">No, default is "false".</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">seedname</td> | <td valign="top">seedname</td> | ||||
| <td valign="top">Seed name for the temporary snapshot files (files will be named | <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 "snapshot"</td> | <td align="center" valign="top">No, default to "snapshot"</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">exitprompt</td> | <td valign="top">exitprompt</td> | ||||
| <td valign="top">Toggles display of the console prompt: "Press Enter to close | <td valign="top">Toggles display of the console prompt: "Press Enter to close | ||||
| this window." "always": Always displays the prompt. "never": Never displays the | |||||
| prompt. "error": Only displays prompt after an error.</td> | |||||
| this window." "always": Always displays the prompt. "never": Never displays the | |||||
| prompt. "error": Only displays prompt after an error.</td> | |||||
| <td align="center" valign="top">No, default is "never"</td> | <td align="center" valign="top">No, default is "never"</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">finalsnapshot</td> | <td valign="top">finalsnapshot</td> | ||||
| <td valign="top">Type of snapshot to send at program termination. Must be one | <td valign="top">Type of snapshot to send at program termination. Must be one | ||||
| of "none","coverage","all"</td> | |||||
| of "none","coverage","all"</td> | |||||
| <td align="center" valign="top">No, default to "coverage"</td> | <td align="center" valign="top">No, default to "coverage"</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">recordfromstart</td> | <td valign="top">recordfromstart</td> | ||||
| <td valign="top">Must be one of "coverage", "all", "none". If you want | <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> | <td align="center" valign="top">No, default to "coverage"</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| @@ -123,8 +115,8 @@ Perform code covering functions by comparing source code line execution to the p | |||||
| <tr> | <tr> | ||||
| <td valign="top">snapshotdir</td> | <td valign="top">snapshotdir</td> | ||||
| <td valign="top">The path to the directory where snapshot files are stored. | <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> | <td align="center" valign="top">No, default to current directory</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| @@ -135,7 +127,7 @@ Perform code covering functions by comparing source code line execution to the p | |||||
| <tr> | <tr> | ||||
| <td valign="top">tracknatives</td> | <td valign="top">tracknatives</td> | ||||
| <td valign="top">Test native methods. Note that testing native methods with | <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 "false".</td> | <td align="center" valign="top">No, default to "false".</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| @@ -214,14 +206,14 @@ The syntax is filters is similar to a <a href="../CoreTypes/fileset.html">filese | |||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">defaultexclude</td> | <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 | Default filters are equivalent to | ||||
| <pre> | <pre> | ||||
| <filters> | <filters> | ||||
| <exclude class="*" method="*"/> | <exclude class="*" method="*"/> | ||||
| </filters> | </filters> | ||||
| </pre> | |||||
| </td> | |||||
| </pre> | |||||
| </td> | |||||
| <td align="center">No, default to "true"</td> | <td align="center">No, default to "true"</td> | ||||
| </tr> | </tr> | ||||
| </table> | </table> | ||||
| @@ -239,12 +231,17 @@ with a <tt>name</tt> attribute. | |||||
| <tr> | <tr> | ||||
| <td valign="top">class</td> | <td valign="top">class</td> | ||||
| <td valign="top">The class mask as a simple regular expression</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> | ||||
| <tr> | <tr> | ||||
| <td valign="top">method</td> | <td valign="top">method</td> | ||||
| <td valign="top">The method mask as a simple regular expression</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> | </tr> | ||||
| </table> | </table> | ||||
| </blockquote> | </blockquote> | ||||
| @@ -280,21 +277,21 @@ on method) and it has the following attributes: | |||||
| <tr> | <tr> | ||||
| <td valign="top">name</td> | <td valign="top">name</td> | ||||
| <td valign="top">The name of the method(s) as a regular expression. The name | <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> | <td align="center" valign="top">Yes</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">event</td> | <td valign="top">event</td> | ||||
| <td valign="top">the event on the method that will trigger the action. Must be | <td valign="top">the event on the method that will trigger the action. Must be | ||||
| "enter" or "exit".</td> | |||||
| "enter" or "exit".</td> | |||||
| <td align="center" valign="top">Yes</td> | <td align="center" valign="top">Yes</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">action</td> | <td valign="top">action</td> | ||||
| <td valign="top">the action to execute. Must be one of "clear", | <td valign="top">the action to execute. Must be one of "clear", | ||||
| "pause", "resume", "snapshot", "suspend", | |||||
| or "exit". They respectively clear recording, pause recording, | |||||
| resume recording, take a snapshot, suspend the recording and exit the program. | |||||
| "pause", "resume", "snapshot", "suspend", | |||||
| or "exit". They respectively clear recording, pause recording, | |||||
| resume recording, take a snapshot, suspend the recording and exit the program. | |||||
| </td> | </td> | ||||
| <td align="center" valign="top">Yes</td> | <td align="center" valign="top">Yes</td> | ||||
| </tr> | </tr> | ||||
| @@ -323,26 +320,26 @@ same class.</p> | |||||
| <h3>Parameters</h3> | <h3>Parameters</h3> | ||||
| <table border="1" cellpadding="2" cellspacing="0"> | <table border="1" cellpadding="2" cellspacing="0"> | ||||
| <tr> | <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> | ||||
| <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> | <td align="center" valign="top">Yes</td> | ||||
| </tr> | </tr> | ||||
| <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> | ||||
| <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> | </tr> | ||||
| </table> | </table> | ||||
| @@ -377,47 +374,47 @@ Oro</a> in Ant classpath, to run the <tt>reference</tt> feature.</p> | |||||
| <h3>Parameters</h3> | <h3>Parameters</h3> | ||||
| <table border="1" cellpadding="2" cellspacing="0"> | <table border="1" cellpadding="2" cellspacing="0"> | ||||
| <tr> | <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> | ||||
| <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> | <td align="center" valign="top">Yes</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">format</td> | |||||
| <td valign="top">The format of the generated report. Must be "xml", "html" or "text"</td> | |||||
| <td align="center" valign="top">No, default to "html"</td> | |||||
| <td valign="top">format</td> | |||||
| <td valign="top">The format of the generated report. Must be "xml", "html" or "text"</td> | |||||
| <td align="center" valign="top">No, default to "html"</td> | |||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">type</td> | |||||
| <td valign="top">The type of report to be generated. Must be "executive", | |||||
| "summary", "detailed" or "verydetailed"</td> | |||||
| <td align="center" valign="top">No. Default to "detailed"</td> | |||||
| <td valign="top">type</td> | |||||
| <td valign="top">The type of report to be generated. Must be "executive", | |||||
| "summary", "detailed" or "verydetailed"</td> | |||||
| <td align="center" valign="top">No. Default to "detailed"</td> | |||||
| </tr> | </tr> | ||||
| <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> | ||||
| <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> | ||||
| <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> | ||||
| <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="xml" and type="verydetailed"</td> | format="xml" and type="verydetailed"</td> | ||||
| <td align="center" valign="top">No. Defaults to "yes"</td> | |||||
| <td align="center" valign="top">No. Defaults to "yes"</td> | |||||
| </tr> | </tr> | ||||
| </table> | </table> | ||||
| @@ -526,7 +523,7 @@ one for JUnit. It needs either Xalan 1.2.2 or Xalan 2.x.</p> | |||||
| </p> | </p> | ||||
| <pre><style processor="xalan" in="./reports/xml/results.xml" out="./reports/html/dummy.file" | <pre><style processor="xalan" in="./reports/xml/results.xml" out="./reports/html/dummy.file" | ||||
| style="${ant.home}/etc/coverage-frames.xsl"> | style="${ant.home}/etc/coverage-frames.xsl"> | ||||
| <param name="output.dir" expression="'${basedir}/reports/html'"/> | |||||
| <param name="output.dir" expression="'${basedir}/reports/html'"/> | |||||
| </style></pre> | </style></pre> | ||||
| <p>Xalan 2.x (note the parameter without single quote)</p> | <p>Xalan 2.x (note the parameter without single quote)</p> | ||||
| <pre><style processor="trax" in="./reports/xml/results.xml" out="./reports/html/dummy.file" | <pre><style processor="trax" in="./reports/xml/results.xml" out="./reports/html/dummy.file" | ||||
| @@ -535,7 +532,7 @@ one for JUnit. It needs either Xalan 1.2.2 or Xalan 2.x.</p> | |||||
| </style></pre> | </style></pre> | ||||
| <hr> | <hr> | ||||
| <p align="center">Copyright © 2001 Apache Software Foundation. All rights | |||||
| <p align="center">Copyright © 2001-2002 Apache Software Foundation. All rights | |||||
| Reserved.</p> | Reserved.</p> | ||||
| </body> | </body> | ||||
| </html> | </html> | ||||
| @@ -174,10 +174,6 @@ classpath. | |||||
| <h4>classpathref</h4> | <h4>classpathref</h4> | ||||
| a reference to an existing classpath | 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> | <h4>webapp</h4> | ||||
| Instructions to jasper to build an entire web application. | Instructions to jasper to build an entire web application. | ||||
| The base directory must have a WEB-INF subdirectory beneath it. | The base directory must have a WEB-INF subdirectory beneath it. | ||||
| @@ -279,8 +279,8 @@ although P4Edit can open files to the default change, P4Submit cannot yet submi | |||||
| <h3>Examples</h3> | <h3>Examples</h3> | ||||
| <pre> | <pre> | ||||
| <p4edit | <p4edit | ||||
| view="//depot/projects/projectfoo/main/src/Blah.java..." | |||||
| change="${p4.change}" /> | |||||
| view="//depot/projects/projectfoo/main/src/Blah.java..." | |||||
| change="${p4.change}" /> | |||||
| </pre> | </pre> | ||||
| <hr> | <hr> | ||||
| @@ -16,7 +16,7 @@ by | |||||
| <li>Don Jeffery (<a href="mailto:donj@apogeenet.com">donj@apogeenet.com</a>)</li> | <li>Don Jeffery (<a href="mailto:donj@apogeenet.com">donj@apogeenet.com</a>)</li> | ||||
| </ul> | </ul> | ||||
| Version 1.1 - 2001/06/27<br> | 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> | argument introduced.</p> | ||||
| Version 1.0 - 2001/01/31<br> | Version 1.0 - 2001/01/31<br> | ||||
| <p>Initial release.</p> | <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 | 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>. | developed by <a href="http://www.merant.com/products/pvcs">Merant</a>. | ||||
| <br> | <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 | 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. | the repository is platform dependent so use property to specify location of repository. | ||||
| <br> | <br> | ||||
| @@ -88,8 +88,8 @@ specified)</td> | |||||
| <tr> | <tr> | ||||
| <td VALIGN=TOP WIDTH="12%">promotiongroup</td> | <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. | promotion group and with that label to be extracted. | ||||
| </td> | </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> | <td VALIGN=TOP WIDTH="10%">No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | |||||
| <tr> | |||||
| <td VALIGN=TOP WIDTH="12%">ignorereturncode</td> | <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> | the pvcs commands are ignored.</td> | ||||
| <td VALIGN=TOP WIDTH="10%">No</td> | <td VALIGN=TOP WIDTH="10%">No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | |||||
| <tr> | |||||
| <td VALIGN=TOP WIDTH="12%">updateonly</td> | <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> | newer than existing local files.</td> | ||||
| <td VALIGN=TOP WIDTH="10%">No</td> | <td VALIGN=TOP WIDTH="10%">No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | |||||
| <tr> | |||||
| <td valign="TOP">filenameformat</td> | <td valign="TOP">filenameformat</td> | ||||
| <td valign="TOP">The format of your folder names in a | <td valign="TOP">The format of your folder names in a | ||||
| format suitable for <code>java.text.MessageFormat</code>. | 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> | <td valign="TOP">No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | |||||
| <tr> | |||||
| <td valign="TOP">linestart</td> | <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>"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>"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> | <td valign="TOP">No</td> | ||||
| </tr> | </tr> | ||||
| </table> | </table> | ||||
| @@ -66,10 +66,10 @@ We <b>strongly</b> recommend that you use Jakarta Oro. | |||||
| <td valign="top">flags</td> | <td valign="top">flags</td> | ||||
| <td valign="top">The flags to use when matching the regular expression. For more | <td valign="top">The flags to use when matching the regular expression. For more | ||||
| information, consult the Perl5 syntax<br /> | 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> | <td valign="top" align="center">No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| @@ -37,7 +37,7 @@ | |||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">cleanBuildDir</td> | <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> | directory.</td> | ||||
| <td align="center" valign="top">No</td> | <td align="center" valign="top">No</td> | ||||
| </tr> | </tr> | ||||
| @@ -47,6 +47,12 @@ directory.</td> | |||||
| <td align="center" valign="top">No</td> | <td align="center" valign="top">No</td> | ||||
| </tr> | </tr> | ||||
| <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">command</td> | ||||
| <td valign="top">very similar idea to the cvs task. the default is "-bb"</td> | <td valign="top">very similar idea to the cvs task. the default is "-bb"</td> | ||||
| <td align="center" valign="top">No</td> | <td align="center" valign="top">No</td> | ||||
| @@ -59,7 +65,7 @@ directory.</td> | |||||
| </table> | </table> | ||||
| <hr> | <hr> | ||||
| <p align="center">Copyright © 2001 Apache Software Foundation. All rights | |||||
| <p align="center">Copyright © 2001-2002 Apache Software Foundation. All rights | |||||
| Reserved.</p> | Reserved.</p> | ||||
| </body> | </body> | ||||
| @@ -35,7 +35,7 @@ still required. | |||||
| <td valign="top">language</td> | <td valign="top">language</td> | ||||
| <td valign="top">The programming language the script is written in. | <td valign="top">The programming language the script is written in. | ||||
| Must be a supported BSF language</td> | Must be a supported BSF language</td> | ||||
| <td valign="top" align="center">No</td> | |||||
| <td valign="top" align="center">Yes</td> | |||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">src</td> | <td valign="top">src</td> | ||||
| @@ -190,7 +190,7 @@ required for all actions. | |||||
| It is in the form <code><component>:<target1>,<target2>...</code> | It is in the form <code><component>:<target1>,<target2>...</code> | ||||
| Where component is the archive name (minus the .jar, .ear, .war | Where component is the archive name (minus the .jar, .ear, .war | ||||
| extension). Targets are the servers where the components will be deployed</td> | extension). Targets are the servers where the components will be deployed</td> | ||||
| <td>Yes</td> | |||||
| <td>no</td> | |||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">debug</td> | <td valign="top">debug</td> | ||||
| @@ -222,7 +222,7 @@ WebLogic server:</p> | |||||
| <pre> | <pre> | ||||
| <serverdeploy action="delete" source="${lib.dir}/ejb_myApp.jar"/> | <serverdeploy action="delete" source="${lib.dir}/ejb_myApp.jar"/> | ||||
| <weblogic application="myapp" | |||||
| <weblogic application="myapp" | |||||
| server="t3://myserver:7001" | server="t3://myserver:7001" | ||||
| classpath="${weblogic.home}/lib/weblogic.jar" | classpath="${weblogic.home}/lib/weblogic.jar" | ||||
| username="${user.name}" | username="${user.name}" | ||||
| @@ -23,7 +23,7 @@ Version 1.1 2002/01/23 | |||||
| <h2>Contents</h2> | <h2>Contents</h2> | ||||
| <ul> | <ul> | ||||
| <li><a href="#intro">Introduction</a></li> | |||||
| <li><a href="#intro">Introduction</a></li> | |||||
| <li><a href="#tasks">The Tasks</a></li> | <li><a href="#tasks">The Tasks</a></li> | ||||
| </ul> | </ul> | ||||
| @@ -55,17 +55,17 @@ have been tested with Linux, Solaris & Windows2000.</p> | |||||
| <td>Retrieves a read-only copy of the specified project or file.</td> | <td>Retrieves a read-only copy of the specified project or file.</td> | ||||
| </tr> | </tr> | ||||
| <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> | <td>Assigns a label to the specified project.</td> | ||||
| </tr> | </tr> | ||||
| <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, | <td>Updates VSS with changes made to a checked out file or project, | ||||
| and unlocks the VSS master copy.</td> | and unlocks the VSS master copy.</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td><a href="#SOSCheckOut"> soscheckout</a></td> | |||||
| <td>Retrieves a read-write copy of the specified project | |||||
| <td><a href="#SOSCheckOut">soscheckout</a></td> | |||||
| <td>Retrieves a read-write copy of the specified project | |||||
| or file, locking the VSS master copy</td> | or file, locking the VSS master copy</td> | ||||
| </tr> | </tr> | ||||
| @@ -28,6 +28,26 @@ whilst waiting for your builds to complete...</p> | |||||
| <td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
| <td valign="top" align="center">antlogo.gif from the classpath</td> | <td valign="top" align="center">antlogo.gif from the classpath</td> | ||||
| </tr> | </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 <setproxy> 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> | <tr> | ||||
| <td valign="top">useproxy</td> | <td valign="top">useproxy</td> | ||||
| <td valign="top">Use a proxy to access imgurl. Note: Only tested | <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">No</td> | ||||
| <td valign="top" align="center">None</td> | <td valign="top" align="center">None</td> | ||||
| </tr> | </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> | </table> | ||||
| <h3>Examples</h3> | <h3>Examples</h3> | ||||
| <blockquote><pre> | <blockquote><pre> | ||||
| @@ -76,15 +90,10 @@ whilst waiting for your builds to complete...</p> | |||||
| <blockquote><pre> | <blockquote><pre> | ||||
| <splash imageurl="http://jakarta.apache.org/images/jakarta-logo.gif" | <splash imageurl="http://jakarta.apache.org/images/jakarta-logo.gif" | ||||
| useproxy="true" | useproxy="true" | ||||
| showduration="5000" | |||||
| proxy="proxy.mydomain.com" | |||||
| port="8080" | |||||
| user="BuildEng" | |||||
| password="LetMePass"/> | |||||
| showduration="5000"/> | |||||
| </pre></blockquote> | </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> | an initial period of 5 seconds.</p> | ||||
| <hr> | <hr> | ||||
| <p align="center">Copyright © 2002 Apache Software Foundation. All rights | <p align="center">Copyright © 2002 Apache Software Foundation. All rights | ||||
| @@ -170,7 +170,7 @@ If false (default) has no effect. | |||||
| username="auser" | username="auser" | ||||
| password="secret" | password="secret" | ||||
| rootlocalfolder="C:\dev\buildtest\co" | rootlocalfolder="C:\dev\buildtest\co" | ||||
| force="true" | |||||
| force="true" | |||||
| /> | /> | ||||
| </pre> | </pre> | ||||
| @@ -184,7 +184,7 @@ created for them and any non-StarTeam files found in the tree will be deleted. | |||||
| username="auser" | username="auser" | ||||
| password="secret" | password="secret" | ||||
| rootlocalfolder="C:\dev\buildtest\co" | rootlocalfolder="C:\dev\buildtest\co" | ||||
| forced="true" | |||||
| forced="true" | |||||
| /> | /> | ||||
| </pre> | </pre> | ||||
| And this is a simpler way of accomplishing the same thing as the previous example, using the URL attribute. | 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" | rootstarteamfolder="\Dev" | ||||
| excludes="*.bak *.old" | excludes="*.bak *.old" | ||||
| label="v2.6.001" | label="v2.6.001" | ||||
| forced="true" | |||||
| forced="true" | |||||
| /> | /> | ||||
| </pre> | </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" | rootlocalfolder="C:\dev\buildtest\co" | ||||
| includes="*.htm,*.html" | includes="*.htm,*.html" | ||||
| excludes="index.*" | excludes="index.*" | ||||
| forced="true" | |||||
| forced="true" | |||||
| /> | /> | ||||
| </pre> | </pre> | ||||
| @@ -227,8 +227,8 @@ not be checked out by this command. | |||||
| rootlocalfolder="C:\dev\buildtest\co" | rootlocalfolder="C:\dev\buildtest\co" | ||||
| includes="*.htm,*.html" | includes="*.htm,*.html" | ||||
| excludes="index.*" | excludes="index.*" | ||||
| forced="true" | |||||
| recursive="false" | |||||
| forced="true" | |||||
| recursive="false" | |||||
| /> | /> | ||||
| </pre> | </pre> | ||||
| This example is like the previous one, but will only check out files in | 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" | password="secret" | ||||
| rootstarteamfolder="src/java" | rootstarteamfolder="src/java" | ||||
| rootlocalfolder="C:\dev\buildtest\co" | rootlocalfolder="C:\dev\buildtest\co" | ||||
| forced="true" | |||||
| forced="true" | |||||
| /> | /> | ||||
| </pre> | </pre> | ||||
| <br></br> | <br></br> | ||||
| @@ -258,7 +258,7 @@ C:\dev\buildtest\co, because of the turning off of the recursive attribute. | |||||
| password="secret" | password="secret" | ||||
| rootstarteamfolder="src/java" | rootstarteamfolder="src/java" | ||||
| rootlocalfolder="C:\dev\buildtest\co\src\java" | rootlocalfolder="C:\dev\buildtest\co\src\java" | ||||
| forced="true" | |||||
| forced="true" | |||||
| /> | /> | ||||
| </pre> | </pre> | ||||
| @@ -351,7 +351,7 @@ change it. If false (default) lock status will not change. | |||||
| username="auser" | username="auser" | ||||
| password="secret" | password="secret" | ||||
| rootlocalfolder="C:\dev\buildtest\co" | rootlocalfolder="C:\dev\buildtest\co" | ||||
| forced="true" | |||||
| forced="true" | |||||
| /> | /> | ||||
| </pre> | </pre> | ||||
| @@ -365,7 +365,7 @@ For files and folders in the local tree but not in starteam, nothing will be don | |||||
| username="auser" | username="auser" | ||||
| password="secret" | password="secret" | ||||
| rootlocalfolder="C:\dev\buildtest\co" | rootlocalfolder="C:\dev\buildtest\co" | ||||
| forced="true" | |||||
| forced="true" | |||||
| /> | /> | ||||
| </pre> | </pre> | ||||
| And this is a simpler way of giving the same commands as the command above using the URL shortcut. | 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" | rootlocalfolder="C:\dev\buildtest\co" | ||||
| rootstarteamfolder="\Dev" | rootstarteamfolder="\Dev" | ||||
| excludes="*.bak *.old" | excludes="*.bak *.old" | ||||
| forced="true" | |||||
| forced="true" | |||||
| /> | /> | ||||
| </pre> | </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" | rootlocalfolder="C:\dev\buildtest\co" | ||||
| includes="*.htm,*.html" | includes="*.htm,*.html" | ||||
| excludes="index.*" | excludes="index.*" | ||||
| forced="true" | |||||
| forced="true" | |||||
| /> | /> | ||||
| </pre> | </pre> | ||||
| @@ -408,8 +408,8 @@ not be checked in by this command. | |||||
| rootstarteamfolder="src/java" | rootstarteamfolder="src/java" | ||||
| includes="*.htm,*.html" | includes="*.htm,*.html" | ||||
| excludes="index.*" | excludes="index.*" | ||||
| forced="true" | |||||
| recursive="false" | |||||
| forced="true" | |||||
| recursive="false" | |||||
| /> | /> | ||||
| </pre> | </pre> | ||||
| This example is like the previous one, but will only check in files from | 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" | rootlocalfolder="C:\dev\buildtest\co" | ||||
| rootstarteamfolder="src/java" | rootstarteamfolder="src/java" | ||||
| includes="version.txt" | includes="version.txt" | ||||
| forced="true" | |||||
| recursive="false" | |||||
| forced="true" | |||||
| recursive="false" | |||||
| /> | /> | ||||
| </pre> | </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. | 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" | rootlocalfolder="C:\dev\buildtest\co" | ||||
| rootstarteamfolder="src/java" | rootstarteamfolder="src/java" | ||||
| includes="version.java" | includes="version.java" | ||||
| forced="true" | |||||
| recursive="false" | |||||
| addUncontrolled="true" | |||||
| comment="Fix Bug #667" | |||||
| forced="true" | |||||
| recursive="false" | |||||
| addUncontrolled="true" | |||||
| comment="Fix Bug #667" | |||||
| /> | /> | ||||
| </pre> | </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. | 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" | password="secret" | ||||
| rootstarteamfolder="src/java" | rootstarteamfolder="src/java" | ||||
| rootlocalfolder="C:\dev\buildtest\co" | rootlocalfolder="C:\dev\buildtest\co" | ||||
| forced="true" | |||||
| forced="true" | |||||
| /> | /> | ||||
| </pre> | </pre> | ||||
| <br></br> | <br></br> | ||||
| @@ -467,7 +467,7 @@ This example is like the previous one, but will only check only in one file, C:\ | |||||
| password="secret" | password="secret" | ||||
| rootstarteamfolder="src/java" | rootstarteamfolder="src/java" | ||||
| rootlocalfolder="C:\dev\buildtest\co\src\java" | rootlocalfolder="C:\dev\buildtest\co\src\java" | ||||
| forced="true" | |||||
| forced="true" | |||||
| /> | /> | ||||
| </pre> | </pre> | ||||
| @@ -606,8 +606,8 @@ while adding a <i>rootlocalfolder</i> and an <i>excludes</i> param ... | |||||
| <stlist url="WASHINGTON:49201/build" | <stlist url="WASHINGTON:49201/build" | ||||
| username="auser" | username="auser" | ||||
| password="secret" | password="secret" | ||||
| rootlocalfolder="srcdir2" | |||||
| excludes="*.properties" | |||||
| rootlocalfolder="srcdir2" | |||||
| excludes="*.properties" | |||||
| /> | /> | ||||
| </pre> | </pre> | ||||
| @@ -14,6 +14,11 @@ Unlike the commandline version of this tool, all three arguments | |||||
| are required to run stylebook.</p> | are required to run stylebook.</p> | ||||
| <p><b>Note:</b> This task depends on external libraries not included in the Ant distribution. | <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> | See <a href="../install.html#librarydependencies">Library Dependencies</a> for more information.</p> | ||||
| <p> | |||||
| Being extended from <Java>, 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> | <h3>Parameters</h3> | ||||
| <table border="1" cellpadding="2" cellspacing="0"> | <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. | src/xdocs/book.xml and using the skin located in directory src/skins/myskin. | ||||
| <hr> | <hr> | ||||
| <p align="center">Copyright © 2001 Apache Software Foundation. All rights | |||||
| <p align="center">Copyright © 2001-2002 Apache Software Foundation. All rights | |||||
| Reserved.</p> | Reserved.</p> | ||||
| </body> | </body> | ||||
| @@ -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. | vss functionality as well as some Ant tasks encapsulating frequently used vss commands. | ||||
| Although it is possible to use these commands on the desktop, | Although it is possible to use these commands on the desktop, | ||||
| they were primarily intended to be used by automated build systems.</p> | 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> | <h2><a name="tasks">The Tasks</a></h2> | ||||
| <table border="0" cellspacing="0" cellpadding="3"> | <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> | <td>Change the current project being used in VSS</td> | ||||
| </tr> | </tr> | ||||
| <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> | </table> | ||||
| <hr> | <hr> | ||||
| @@ -114,17 +118,17 @@ label only one will be used in the order version, date, label.</p> | |||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td>serverPath</td> | <td>serverPath</td> | ||||
| <td>directory where <code>srssafe.ini</code> resides.</td> | |||||
| <td>directory where <code>ss.ini</code> resides.</td> | |||||
| <td>No</td> | <td>No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td>writable</td> | <td>writable</td> | ||||
| <td>true or false</td> | |||||
| <td>true or false<; default false/td> | |||||
| <td>No</td> | <td>No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td>recursive</td> | <td>recursive</td> | ||||
| <td>true or false</td> | |||||
| <td>true or false; default false</td> | |||||
| <td>No</td> | <td>No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| @@ -303,7 +307,7 @@ Task to perform HISTORY commands to Microsoft Visual SourceSafe. | |||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td>toDate</td> | <td>toDate</td> | ||||
| <td>Start date for comparison</td> | |||||
| <td>End date for comparison</td> | |||||
| <td>See below</td> | <td>See below</td> | ||||
| </tr> | </tr> | ||||
| <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>brief, codediff, default or nofile. The default is default.</td> | ||||
| <td>No</td> | <td>No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | |||||
| <td>user</td> | |||||
| <td>Name the user whose changes we would like to see</td> | |||||
| <td>No</td> | |||||
| </tr> | |||||
| </table> | </table> | ||||
| <h4>Specifying the time-frame</h4> | <h4>Specifying the time-frame</h4> | ||||
| @@ -15,8 +15,8 @@ task uses the SAX2 parser implementation provided by JAXP by default | |||||
| SAX1/2 parser if needed.</p> | SAX1/2 parser if needed.</p> | ||||
| <p>This task supports the use of nested <a | <p>This task supports the use of nested <a | ||||
| href="../CoreTypes/xmlcatalog.html">xmlcatalog</a> elements and/or nested | |||||
| <dtd> elements which are used to resolve DTDs and entities.</p> | |||||
| href="../CoreTypes/xmlcatalog.html">xmlcatalog</a> elements and/or nested | |||||
| <tt><dtd></tt> elements which are used to resolve DTDs and entities.</p> | |||||
| <h3>Parameters</h3> | <h3>Parameters</h3> | ||||
| <table border="1" cellpadding="2" cellspacing="0"> | <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">lenient</td> | ||||
| <td valign="top"> | <td valign="top"> | ||||
| if true, only check the xml document is well formed | 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> | ||||
| <td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
| </tr> | </tr> | ||||
| @@ -70,19 +70,19 @@ href="../CoreTypes/xmlcatalog.html">xmlcatalog</a> elements and/or nested | |||||
| <td width="10%" valign="top"><b>Required</b></td> | <td width="10%" valign="top"><b>Required</b></td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">publicId</td> | |||||
| <td valign="top">publicId</td> | |||||
| <td valign="top">Public ID of the DTD to resolve</td> | <td valign="top">Public ID of the DTD to resolve</td> | ||||
| <td align="center" valign="top">Yes</td> | <td align="center" valign="top">Yes</td> | ||||
| </tr> | </tr> | ||||
| <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, | <td valign="top">Location of the DTD to use, which can be a file, | ||||
| a resource, or a URL</td> | a resource, or a URL</td> | ||||
| <td align="center" valign="top">Yes</td> | <td align="center" valign="top">Yes</td> | ||||
| </tr> | </tr> | ||||
| </table> | </table> | ||||
| <h4>xmlcatalog</h4> | <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> | element is used to perform Entity resolution.</p> | ||||
| @@ -93,9 +93,9 @@ element is used to perform Entity resolution.</p> | |||||
| <xmlvalidate failonerror="no" lenient="yes" warn="yes" | <xmlvalidate failonerror="no" lenient="yes" warn="yes" | ||||
| classname="org.apache.xerces.parsers.SAXParser" > | classname="org.apache.xerces.parsers.SAXParser" > | ||||
| classpath="lib/xerces.jar"> | classpath="lib/xerces.jar"> | ||||
| <fileset dir="src" includes="style/*.xsl"/> | |||||
| <fileset dir="src" includes="style/*.xsl"/> | |||||
| </xmlvalidate> | </xmlvalidate> | ||||
| <xmlvalidate file="struts-config.xml" warn="false"> | <xmlvalidate file="struts-config.xml" warn="false"> | ||||
| <dtd publicId="-//Apache Software Foundation//DTD Struts Configuration 1.0//EN" | <dtd publicId="-//Apache Software Foundation//DTD Struts Configuration 1.0//EN" | ||||
| location="struts-config_1_0.dtd"/> | location="struts-config_1_0.dtd"/> | ||||
| @@ -109,7 +109,7 @@ element is used to perform Entity resolution.</p> | |||||
| <xmlvalidate failonerror="no"> | <xmlvalidate failonerror="no"> | ||||
| <fileset dir="${project.dir}" includes="**/*.xml"/> | <fileset dir="${project.dir}" includes="**/*.xml"/> | ||||
| <xmlcatalog> | <xmlcatalog> | ||||
| <dtd | |||||
| <dtd | |||||
| publicId="-//ArielPartners//DTD XML Article V1.0//EN" | publicId="-//ArielPartners//DTD XML Article V1.0//EN" | ||||
| location="com/arielpartners/knowledgebase/dtd/article.dtd"/> | location="com/arielpartners/knowledgebase/dtd/article.dtd"/> | ||||
| </xmlcatalog> | </xmlcatalog> | ||||
| @@ -11,6 +11,8 @@ | |||||
| <h2><a href="toc.html" target="navFrame">Table of Contents</a></h2> | <h2><a href="toc.html" target="navFrame">Table of Contents</a></h2> | ||||
| <a href="optionaltasklist.html" target="navFrame">Optional Tasks</a><br> | <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> | <h3>Core Tasks</h3> | ||||
| <a href="CoreTasks/ant.html">Ant</a><br> | <a href="CoreTasks/ant.html">Ant</a><br> | ||||
| @@ -74,6 +76,7 @@ | |||||
| <a href="CoreTasks/style.html">Style</a><br> | <a href="CoreTasks/style.html">Style</a><br> | ||||
| <a href="CoreTasks/tar.html">Tar</a><br> | <a href="CoreTasks/tar.html">Tar</a><br> | ||||
| <a href="CoreTasks/taskdef.html">Taskdef</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/touch.html">Touch</a><br> | ||||
| <a href="CoreTasks/tstamp.html">TStamp</a><br> | <a href="CoreTasks/tstamp.html">TStamp</a><br> | ||||
| <a href="CoreTasks/typedef.html">Typedef</a><br> | <a href="CoreTasks/typedef.html">Typedef</a><br> | ||||
| @@ -161,6 +161,8 @@ They are:</p> | |||||
| **/SCCS | **/SCCS | ||||
| **/SCCS/** | **/SCCS/** | ||||
| **/vssver.scc | **/vssver.scc | ||||
| **/.svn | |||||
| **/.svn/** | |||||
| </pre> | </pre> | ||||
| <p>If you do not want these default excludes applied, you may disable them with the | <p>If you do not want these default excludes applied, you may disable them with the | ||||
| <code>defaultexcludes="no"</code> attribute.</p> | <code>defaultexcludes="no"</code> attribute.</p> | ||||
| @@ -67,10 +67,25 @@ compiler is supported. | |||||
| </p> | </p> | ||||
| <hr> | <hr> | ||||
| <h2><a name="installing">Installing Ant</a></h2> | <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 | Only the <code>bin</code> and <code>lib</code> directories are | ||||
| required to run Ant. | 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 | <p>Make sure you have downloaded any auxiliary jars required to | ||||
| build tasks you are interested in. These should either be available | 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. | directory. | ||||
| See <a href="#librarydependencies">Library Dependencies</a> | See <a href="#librarydependencies">Library Dependencies</a> | ||||
| for a list of jar requirements for various features. | for a list of jar requirements for various features. | ||||
| @@ -11,6 +11,8 @@ | |||||
| <h2><a href="toc.html" target="navFrame">Table of Contents</a></h2> | <h2><a href="toc.html" target="navFrame">Table of Contents</a></h2> | ||||
| <a href="coretasklist.html" target="navFrame">Core Tasks</a><br> | <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> | <h3>Optional Tasks</h3> | ||||
| <a href="OptionalTasks/dotnet.html">.NET Tasks</a><br> | <a href="OptionalTasks/dotnet.html">.NET Tasks</a><br> | ||||
| @@ -23,10 +25,10 @@ | |||||
| <a href="OptionalTasks/echoproperties.html">Echoproperties</a><br> | <a href="OptionalTasks/echoproperties.html">Echoproperties</a><br> | ||||
| <a href="OptionalTasks/ftp.html">FTP</a><br> | <a href="OptionalTasks/ftp.html">FTP</a><br> | ||||
| <a href="OptionalTasks/icontract.html">IContract</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/javacc.html">JavaCC</a><br> | ||||
| <a href="OptionalTasks/javah.html">Javah</a><br> | <a href="OptionalTasks/javah.html">Javah</a><br> | ||||
| <a href="OptionalTasks/jspc.html">JspC</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/replaceregexp.html">ReplaceRegExp</a><br> | ||||
| <a href="OptionalTasks/rpm.html">Rpm</a><br> | <a href="OptionalTasks/rpm.html">Rpm</a><br> | ||||
| <a href="OptionalTasks/serverdeploy.html">ServerDeploy</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/script.html">Script</a><br> | ||||
| <a href="OptionalTasks/sound.html">Sound</a><br> | <a href="OptionalTasks/sound.html">Sound</a><br> | ||||
| <a href="OptionalTasks/sos.html">SourceOffSite</a><br> | <a href="OptionalTasks/sos.html">SourceOffSite</a><br> | ||||
| @@ -21,6 +21,7 @@ documentation.</p> | |||||
| <a href="#ejb">EJB Tasks</a><br> | <a href="#ejb">EJB Tasks</a><br> | ||||
| <a href="#exec">Execution Tasks</a><br> | <a href="#exec">Execution Tasks</a><br> | ||||
| <a href="#file">File 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="#log">Logging Tasks</a><br> | ||||
| <a href="#mail">Mail Tasks</a><br> | <a href="#mail">Mail Tasks</a><br> | ||||
| <a href="#misc">Miscellaneous Tasks</a><br> | <a href="#misc">Miscellaneous Tasks</a><br> | ||||
| @@ -561,6 +562,12 @@ documentation.</p> | |||||
| files.</p></td> | files.</p></td> | ||||
| </tr> | </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"> | <tr valign="top"> | ||||
| <td nowrap><a href="CoreTasks/touch.html">Touch</a></td> | <td nowrap><a href="CoreTasks/touch.html">Touch</a></td> | ||||
| <td><p>Changes the modification time of a file and possibly creates it at | <td><p>Changes the modification time of a file and possibly creates it at | ||||
| @@ -568,6 +575,60 @@ documentation.</p> | |||||
| </tr> | </tr> | ||||
| </table> | </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 "Optional Package" and | |||||
| "Package Specification" 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/"Optional Package" | |||||
| 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> | <p></p> | ||||
| <table width="100%" border="0" cellpadding="4" cellspacing="0"> | <table width="100%" border="0" cellpadding="4" cellspacing="0"> | ||||
| <th align="left"> | <th align="left"> | ||||
| @@ -949,7 +1010,13 @@ documentation.</p> | |||||
| nested <code><read></code> and <code><write></code> tags | nested <code><read></code> and <code><write></code> tags | ||||
| to indicate strings to wait for and specify text to send.</p></td> | to indicate strings to wait for and specify text to send.</p></td> | ||||
| </tr> | </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> | </table> | ||||
| <p></p> | <p></p> | ||||
| @@ -30,7 +30,7 @@ to be unique. (For additional information, see the | |||||
| <tr> | <tr> | ||||
| <td valign="top">default</td> | <td valign="top">default</td> | ||||
| <td valign="top">the default target to use when no target is supplied.</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> | ||||
| <tr> | <tr> | ||||
| <td valign="top">basedir</td> | <td valign="top">basedir</td> | ||||
| @@ -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 | Dependencies for a list of the jar requirements for various optional | ||||
| tasks and features. | 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. | |||||
| @@ -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> | |||||
| @@ -0,0 +1,4 @@ | |||||
| <target name="included-target"> | |||||
| extraneous_text | |||||
| <echo>included-target ran.</echo> | |||||
| </target> | |||||
| @@ -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> | |||||
| @@ -0,0 +1,4 @@ | |||||
| <target name="included-target"> | |||||
| <copy file="nonexistent-file" todir="/non/existent/dir"/> | |||||
| <echo>included-target ran.</echo> | |||||
| </target> | |||||
| @@ -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> | |||||
| @@ -0,0 +1,3 @@ | |||||
| <target name="included-target"> | |||||
| <echo>included-target ran.</echo> | |||||
| </target> | |||||
| @@ -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> | |||||
| @@ -0,0 +1,3 @@ | |||||
| <target name="included-target"> | |||||
| <echo>included-target ran.</echo> | |||||
| </target> | |||||
| @@ -0,0 +1,8 @@ | |||||
| <root> | |||||
| <a>this is the first line</a> | |||||
| <b><c>not indented</c></b> | |||||
| <b> | |||||
| <c>indented</c> | |||||
| </b> | |||||
| </root> | |||||
| @@ -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> | |||||
| @@ -31,5 +31,16 @@ | |||||
| </style> | </style> | ||||
| </target> | </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> | </project> | ||||
| @@ -78,6 +78,22 @@ | |||||
| </zip> | </zip> | ||||
| </target> | </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"> | <target name="cleanup"> | ||||
| <delete file="test3.zip"/> | <delete file="test3.zip"/> | ||||
| <delete file="test4.zip"/> | <delete file="test4.zip"/> | ||||
| @@ -88,5 +104,6 @@ | |||||
| <delete file="test8.zip"/> | <delete file="test8.zip"/> | ||||
| <delete file="asf-logo.gif.zip"/> | <delete file="asf-logo.gif.zip"/> | ||||
| <delete file="zipgroupfileset.zip"/> | <delete file="zipgroupfileset.zip"/> | ||||
| <delete file="../dummyfile" /> | |||||
| </target> | </target> | ||||
| </project> | </project> | ||||
| @@ -5,6 +5,8 @@ | |||||
| <property name="etc.dir" value=".."/> | <property name="etc.dir" value=".."/> | ||||
| <property name="test.dir" | <property name="test.dir" | ||||
| value="selectortest"/> | value="selectortest"/> | ||||
| <property name="mirror.dir" | |||||
| value="selectortest2"/> | |||||
| <target name="setupfiles"> | <target name="setupfiles"> | ||||
| <mkdir dir="${test.dir}" /> | <mkdir dir="${test.dir}" /> | ||||
| @@ -57,4 +59,27 @@ | |||||
| <delete dir="${test.dir}" /> | <delete dir="${test.dir}" /> | ||||
| </target> | </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> | </project> | ||||
| @@ -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()); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -169,7 +169,9 @@ public class DirectoryScanner implements FileScanner, SelectorScanner { | |||||
| "**/.cvsignore", | "**/.cvsignore", | ||||
| "**/SCCS", | "**/SCCS", | ||||
| "**/SCCS/**", | "**/SCCS/**", | ||||
| "**/vssver.scc" | |||||
| "**/vssver.scc", | |||||
| "**/.svn", | |||||
| "**/.svn/**" | |||||
| }; | }; | ||||
| /** The base directory to be scanned. */ | /** The base directory to be scanned. */ | ||||
| @@ -176,6 +176,7 @@ public class Main { | |||||
| Main m = null; | Main m = null; | ||||
| try { | try { | ||||
| Diagnostics.validateVersion(); | |||||
| m = new Main(args); | m = new Main(args); | ||||
| } catch (Throwable exc) { | } catch (Throwable exc) { | ||||
| printMessage(exc); | printMessage(exc); | ||||
| @@ -264,6 +265,9 @@ public class Main { | |||||
| } else if (arg.equals("-version")) { | } else if (arg.equals("-version")) { | ||||
| printVersion(); | printVersion(); | ||||
| return; | return; | ||||
| } else if (arg.equals("-diagnostics")){ | |||||
| Diagnostics.doReport(System.out); | |||||
| return; | |||||
| } else if (arg.equals("-quiet") || arg.equals("-q")) { | } else if (arg.equals("-quiet") || arg.equals("-q")) { | ||||
| msgOutputLevel = Project.MSG_WARN; | msgOutputLevel = Project.MSG_WARN; | ||||
| } else if (arg.equals("-verbose") || arg.equals("-v")) { | } else if (arg.equals("-verbose") || arg.equals("-v")) { | ||||
| @@ -589,7 +593,7 @@ public class Main { | |||||
| } | } | ||||
| project.setUserProperty("ant.file", | project.setUserProperty("ant.file", | ||||
| buildFile.getAbsolutePath()); | |||||
| buildFile.getAbsolutePath()); | |||||
| ProjectHelper.configureProject(project, buildFile); | ProjectHelper.configureProject(project, buildFile); | ||||
| @@ -732,6 +736,8 @@ public class Main { | |||||
| msg.append(" -help print this message" + lSep); | msg.append(" -help print this message" + lSep); | ||||
| msg.append(" -projecthelp print project help information" + lSep); | msg.append(" -projecthelp print project help information" + lSep); | ||||
| msg.append(" -version print the version information and exit" + 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(" -quiet, -q be extra quiet" + lSep); | ||||
| msg.append(" -verbose, -v be extra verbose" + lSep); | msg.append(" -verbose, -v be extra verbose" + lSep); | ||||
| msg.append(" -debug print debugging information" + lSep); | msg.append(" -debug print debugging information" + lSep); | ||||
| @@ -785,7 +791,6 @@ public class Main { | |||||
| props.load(in); | props.load(in); | ||||
| in.close(); | in.close(); | ||||
| String lSep = System.getProperty("line.separator"); | |||||
| StringBuffer msg = new StringBuffer(); | StringBuffer msg = new StringBuffer(); | ||||
| msg.append("Apache Ant version "); | msg.append("Apache Ant version "); | ||||
| msg.append(props.getProperty("VERSION")); | msg.append(props.getProperty("VERSION")); | ||||
| @@ -155,7 +155,7 @@ public class ProjectHelperImpl extends ProjectHelper { | |||||
| parser.parse(inputSource); | parser.parse(inputSource); | ||||
| } catch (SAXParseException exc) { | } catch (SAXParseException exc) { | ||||
| Location location = | Location location = | ||||
| new Location(buildFile.toString(), exc.getLineNumber(), | |||||
| new Location(exc.getSystemId(), exc.getLineNumber(), | |||||
| exc.getColumnNumber()); | exc.getColumnNumber()); | ||||
| Throwable t = exc.getException(); | Throwable t = exc.getException(); | ||||
| @@ -452,7 +452,9 @@ public class ProjectHelperImpl extends ProjectHelper { | |||||
| } | } | ||||
| if (def == null) { | if (def == null) { | ||||
| helperImpl.project.setDefaultTarget("main"); | |||||
| throw new SAXParseException("The default attribute of project " | |||||
| + "is required", | |||||
| helperImpl.locator); | |||||
| } else { | } else { | ||||
| helperImpl.project.setDefaultTarget(def); | helperImpl.project.setDefaultTarget(def); | ||||
| } | } | ||||
| @@ -791,7 +793,7 @@ public class ProjectHelperImpl extends ProjectHelper { | |||||
| task.setTaskName(tag); | 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.locator.getColumnNumber())); | ||||
| helperImpl.configureId(task, attrs); | helperImpl.configureId(task, attrs); | ||||
| @@ -72,7 +72,7 @@ import java.util.Hashtable; | |||||
| import java.util.Enumeration; | import java.util.Enumeration; | ||||
| /** | /** | ||||
| * Call Ant in a sub-project. | |||||
| * Build a sub-project. | |||||
| * | * | ||||
| * <pre> | * <pre> | ||||
| * <target name="foo" depends="init"> | * <target name="foo" depends="init"> | ||||
| @@ -329,7 +329,10 @@ public class Ant extends Task { | |||||
| if (dir != null) { | if (dir != null) { | ||||
| newProject.setBaseDir(dir); | newProject.setBaseDir(dir); | ||||
| newProject.setUserProperty("basedir" , dir.getAbsolutePath()); | |||||
| if (savedDir != null) { // has been set explicitly | |||||
| newProject.setInheritedProperty("basedir" , | |||||
| dir.getAbsolutePath()); | |||||
| } | |||||
| } else { | } else { | ||||
| dir = project.getBaseDir(); | 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 | * Defaults to the current project's basedir, unless inheritall | ||||
| * has been set to false, in which case it doesn't have a default | * 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. | * value. This will override the basedir setting of the called project. | ||||
| @@ -59,8 +59,8 @@ import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.Task; | 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: | * This task can accept the following attributes: | ||||
| * <ul> | * <ul> | ||||
| @@ -63,7 +63,8 @@ import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.util.FileUtils; | 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 | * 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 | * "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 | * it will increment the build number by one and write it back out into the | ||||
| @@ -67,9 +67,7 @@ import java.io.FileWriter; | |||||
| import java.io.IOException; | 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> | * @author <a href="jeff@custommonkey.org">Jeff Martin</a> | ||||
| * @version $Revision$ | * @version $Revision$ | ||||
| @@ -136,7 +136,6 @@ public class CallTarget extends Task { | |||||
| location); | location); | ||||
| } | } | ||||
| callee.setDir(getProject().getBaseDir()); | |||||
| callee.setAntfile(getProject().getProperty("ant.file")); | callee.setAntfile(getProject().getProperty("ant.file")); | ||||
| callee.setTarget(subTarget); | callee.setTarget(subTarget); | ||||
| callee.setInheritAll(inheritAll); | callee.setInheritAll(inheritAll); | ||||
| @@ -68,7 +68,7 @@ import org.apache.tools.ant.types.PatternSet; | |||||
| * Chmod equivalent for unix-like environments. | * Chmod equivalent for unix-like environments. | ||||
| * | * | ||||
| * @author costin@eng.sun.com | * @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> | * <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> | * @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) { | public void setExecutable(String e) { | ||||
| throw new BuildException(taskType | |||||
| throw new BuildException(taskType | |||||
| + " doesn\'t support the executable attribute", location); | + " doesn\'t support the executable attribute", location); | ||||
| } | } | ||||
| /** | /** | ||||
| * Not supported. | |||||
| * @param cmdl | |||||
| * @ant.attribute ignore="true" | |||||
| */ | */ | ||||
| public void setCommand(Commandline cmdl) { | public void setCommand(Commandline cmdl) { | ||||
| throw new BuildException(taskType | |||||
| throw new BuildException(taskType | |||||
| + " doesn\'t support the command attribute", location); | + " doesn\'t support the command attribute", location); | ||||
| } | } | ||||
| /** | /** | ||||
| * Not supported. | |||||
| * @param skip | |||||
| * @ant.attribute ignore="true" | |||||
| */ | */ | ||||
| public void setSkipEmptyFilesets(boolean skip) { | public void setSkipEmptyFilesets(boolean skip) { | ||||
| throw new BuildException(taskType | |||||
| throw new BuildException(taskType | |||||
| + " doesn\'t support the skipemptyfileset attribute", location); | + " doesn\'t support the skipemptyfileset attribute", location); | ||||
| } | } | ||||
| @@ -76,7 +76,7 @@ import java.util.Hashtable; | |||||
| import java.util.Enumeration; | 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 | * or directory. Files are only copied if the source file is newer | ||||
| * than the destination file, or when the destination file does not | * than the destination file, or when the destination file does not | ||||
| * exist. It is possible to explicitly overwrite existing files.</p> | * 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 | * document, the following mailing list discussions, and the | ||||
| * copyfile/copydir tasks.</p> | * copyfile/copydir tasks.</p> | ||||
| * | * | ||||
| * @author Glenn McAllister | |||||
| * @author Glenn McAllister | |||||
| * <a href="mailto:glennm@ca.ibm.com">glennm@ca.ibm.com</a> | * <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="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
| * @author <A href="gholam@xtra.co.nz">Michael McCallum</A> | * @author <A href="gholam@xtra.co.nz">Michael McCallum</A> | ||||
| @@ -122,7 +122,7 @@ public class Copy extends Task { | |||||
| private String encoding = null; | private String encoding = null; | ||||
| /** | /** | ||||
| * Copy task constructor. | |||||
| * Copy task constructor. | |||||
| */ | */ | ||||
| public Copy() { | public Copy() { | ||||
| fileUtils = FileUtils.newFileUtils(); | fileUtils = FileUtils.newFileUtils(); | ||||
| @@ -316,12 +316,12 @@ public class Copy extends Task { | |||||
| // will be removed in validateAttributes | // will be removed in validateAttributes | ||||
| savedFileSet = (FileSet) filesets.elementAt(0); | savedFileSet = (FileSet) filesets.elementAt(0); | ||||
| } | } | ||||
| // make sure we don't have an illegal set of options | // make sure we don't have an illegal set of options | ||||
| validateAttributes(); | validateAttributes(); | ||||
| try { | try { | ||||
| // deal with the single file | // deal with the single file | ||||
| if (file != null) { | if (file != null) { | ||||
| if (file.exists()) { | if (file.exists()) { | ||||
| @@ -331,10 +331,10 @@ public class Copy extends Task { | |||||
| if (forceOverwrite || | if (forceOverwrite || | ||||
| (file.lastModified() > destFile.lastModified())) { | (file.lastModified() > destFile.lastModified())) { | ||||
| fileCopyMap.put(file.getAbsolutePath(), | |||||
| fileCopyMap.put(file.getAbsolutePath(), | |||||
| destFile.getAbsolutePath()); | destFile.getAbsolutePath()); | ||||
| } else { | } else { | ||||
| log(file + " omitted as " + destFile | |||||
| log(file + " omitted as " + destFile | |||||
| + " is up to date.", Project.MSG_VERBOSE); | + " is up to date.", Project.MSG_VERBOSE); | ||||
| } | } | ||||
| } else { | } else { | ||||
| @@ -353,7 +353,7 @@ public class Copy extends Task { | |||||
| FileSet fs = (FileSet) filesets.elementAt(i); | FileSet fs = (FileSet) filesets.elementAt(i); | ||||
| DirectoryScanner ds = fs.getDirectoryScanner(project); | DirectoryScanner ds = fs.getDirectoryScanner(project); | ||||
| File fromDir = fs.getDir(project); | File fromDir = fs.getDir(project); | ||||
| String[] srcFiles = ds.getIncludedFiles(); | String[] srcFiles = ds.getIncludedFiles(); | ||||
| String[] srcDirs = ds.getIncludedDirectories(); | String[] srcDirs = ds.getIncludedDirectories(); | ||||
| boolean isEverythingIncluded = ds.isEverythingIncluded(); | boolean isEverythingIncluded = ds.isEverythingIncluded(); | ||||
| @@ -363,7 +363,7 @@ public class Copy extends Task { | |||||
| } | } | ||||
| scan(fromDir, destDir, srcFiles, srcDirs); | scan(fromDir, destDir, srcFiles, srcDirs); | ||||
| } | } | ||||
| // do all the copy operations now... | // do all the copy operations now... | ||||
| doFileOperations(); | doFileOperations(); | ||||
| } finally { | } finally { | ||||
| @@ -447,7 +447,7 @@ public class Copy extends Task { | |||||
| * Compares source files to destination files to see if they should be | * Compares source files to destination files to see if they should be | ||||
| * copied. | * copied. | ||||
| */ | */ | ||||
| protected void scan(File fromDir, File toDir, String[] files, | |||||
| protected void scan(File fromDir, File toDir, String[] files, | |||||
| String[] dirs) { | String[] dirs) { | ||||
| FileNameMapper mapper = null; | FileNameMapper mapper = null; | ||||
| if (mapperElement != null) { | if (mapperElement != null) { | ||||
| @@ -496,8 +496,8 @@ public class Copy extends Task { | |||||
| */ | */ | ||||
| protected void doFileOperations() { | protected void doFileOperations() { | ||||
| if (fileCopyMap.size() > 0) { | 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()); | + " to " + destDir.getAbsolutePath()); | ||||
| Enumeration e = fileCopyMap.keys(); | Enumeration e = fileCopyMap.keys(); | ||||
| @@ -513,20 +513,20 @@ public class Copy extends Task { | |||||
| try { | try { | ||||
| log("Copying " + fromFile + " to " + toFile, verbosity); | log("Copying " + fromFile + " to " + toFile, verbosity); | ||||
| FilterSetCollection executionFilters = | |||||
| FilterSetCollection executionFilters = | |||||
| new FilterSetCollection(); | new FilterSetCollection(); | ||||
| if (filtering) { | if (filtering) { | ||||
| executionFilters | executionFilters | ||||
| .addFilterSet(project.getGlobalFilterSet()); | .addFilterSet(project.getGlobalFilterSet()); | ||||
| } | } | ||||
| for (Enumeration filterEnum = filterSets.elements(); | |||||
| for (Enumeration filterEnum = filterSets.elements(); | |||||
| filterEnum.hasMoreElements();) { | filterEnum.hasMoreElements();) { | ||||
| executionFilters | executionFilters | ||||
| .addFilterSet((FilterSet) filterEnum.nextElement()); | .addFilterSet((FilterSet) filterEnum.nextElement()); | ||||
| } | } | ||||
| fileUtils.copyFile(fromFile, toFile, executionFilters, | |||||
| filterChains, forceOverwrite, | |||||
| preserveLastModified, encoding, | |||||
| fileUtils.copyFile(fromFile, toFile, executionFilters, | |||||
| filterChains, forceOverwrite, | |||||
| preserveLastModified, encoding, | |||||
| project); | project); | ||||
| } catch (IOException ioe) { | } catch (IOException ioe) { | ||||
| String msg = "Failed to copy " + fromFile + " to " + toFile | String msg = "Failed to copy " + fromFile + " to " + toFile | ||||
| @@ -543,7 +543,7 @@ public class Copy extends Task { | |||||
| File d = new File((String) e.nextElement()); | File d = new File((String) e.nextElement()); | ||||
| if (!d.exists()) { | if (!d.exists()) { | ||||
| if (!d.mkdirs()) { | if (!d.mkdirs()) { | ||||
| log("Unable to create directory " | |||||
| log("Unable to create directory " | |||||
| + d.getAbsolutePath(), Project.MSG_ERR); | + d.getAbsolutePath(), Project.MSG_ERR); | ||||
| } else { | } else { | ||||
| count++; | count++; | ||||
| @@ -66,7 +66,7 @@ import org.apache.tools.ant.types.FileSet; | |||||
| import org.apache.tools.ant.types.FileList; | 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 | * are out of date with respect to any of the source files, all target | ||||
| * files are removed. This is useful where dependencies cannot be | * files are removed. This is useful where dependencies cannot be | ||||
| * computed (for example, dynamically interpreted parameters or files | * computed (for example, dynamically interpreted parameters or files | ||||
| @@ -60,7 +60,7 @@ import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.Task; | 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: | * This task can accept the following attributes: | ||||
| * <ul> | * <ul> | ||||
| @@ -63,7 +63,7 @@ import java.io.File; | |||||
| import java.io.FileWriter; | import java.io.FileWriter; | ||||
| import java.io.IOException; | import java.io.IOException; | ||||
| /** | /** | ||||
| * Echo | |||||
| * Writes a message to the Ant logging facilities. | |||||
| * | * | ||||
| * @author costin@dnt.ro | * @author costin@dnt.ro | ||||
| * | * | ||||
| @@ -99,9 +99,9 @@ public class ExecTask extends Task { | |||||
| private boolean failIfExecFails = true; | private boolean failIfExecFails = true; | ||||
| private boolean append = false; | private boolean append = false; | ||||
| /** | |||||
| /** | |||||
| * Controls whether the VM (1.3 and above) is used to execute the | * Controls whether the VM (1.3 and above) is used to execute the | ||||
| * command | |||||
| * command | |||||
| */ | */ | ||||
| private boolean vmLauncher = true; | 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) { | public void setCommand(Commandline cmdl) { | ||||
| log("The command attribute is deprecated. " + | log("The command attribute is deprecated. " + | ||||
| @@ -209,9 +208,9 @@ public class ExecTask extends Task { | |||||
| public void setResultProperty(String resultProperty) { | public void setResultProperty(String resultProperty) { | ||||
| this.resultProperty = 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 | * passed in value if appropriate | ||||
| */ | */ | ||||
| protected void maybeSetResultPropertyValue(int result) { | protected void maybeSetResultPropertyValue(int result) { | ||||
| @@ -220,16 +219,16 @@ public class ExecTask extends Task { | |||||
| project.setNewProperty(resultProperty, res); | project.setNewProperty(resultProperty, res); | ||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| * Stop the build if program cannot be started. Defaults to true. | * Stop the build if program cannot be started. Defaults to true. | ||||
| * | * | ||||
| * @since Ant 1.5 | |||||
| * @since Ant 1.5 | |||||
| */ | */ | ||||
| public void setFailIfExecutionFails(boolean flag) { | public void setFailIfExecutionFails(boolean flag) { | ||||
| failIfExecFails = flag; | failIfExecFails = flag; | ||||
| } | } | ||||
| /** | /** | ||||
| * Whether output should be appended to or overwrite an existing file. | * Whether output should be appended to or overwrite an existing file. | ||||
| * Defaults to false. | * Defaults to false. | ||||
| @@ -281,7 +280,7 @@ public class ExecTask extends Task { | |||||
| log("Current OS is " + myos, Project.MSG_VERBOSE); | log("Current OS is " + myos, Project.MSG_VERBOSE); | ||||
| if ((os != null) && (os.indexOf(myos) < 0)){ | if ((os != null) && (os.indexOf(myos) < 0)){ | ||||
| // this command will be executed only on the specified OS | // 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, | + " was not found in the specified list of valid OSes: " + os, | ||||
| Project.MSG_VERBOSE); | Project.MSG_VERBOSE); | ||||
| return false; | return false; | ||||
| @@ -330,7 +329,7 @@ public class ExecTask extends Task { | |||||
| err = exe.execute(); | err = exe.execute(); | ||||
| //test for and handle a forced process death | //test for and handle a forced process death | ||||
| if (exe.killedProcess()) { | if (exe.killedProcess()) { | ||||
| log("Timeout: killed the sub-process", Project.MSG_WARN); | |||||
| log("Timeout: killed the sub-process", Project.MSG_WARN); | |||||
| } | } | ||||
| maybeSetResultPropertyValue(err); | maybeSetResultPropertyValue(err); | ||||
| if (err != 0) { | if (err != 0) { | ||||
| @@ -390,10 +389,10 @@ public class ExecTask extends Task { | |||||
| log("Output redirected to " + out, Project.MSG_VERBOSE); | log("Output redirected to " + out, Project.MSG_VERBOSE); | ||||
| return new PumpStreamHandler(fos); | return new PumpStreamHandler(fos); | ||||
| } catch (FileNotFoundException fne) { | } catch (FileNotFoundException fne) { | ||||
| throw new BuildException("Cannot write to " + out, fne, | |||||
| throw new BuildException("Cannot write to " + out, fne, | |||||
| location); | location); | ||||
| } catch (IOException ioe) { | } catch (IOException ioe) { | ||||
| throw new BuildException("Cannot write to " + out, ioe, | |||||
| throw new BuildException("Cannot write to " + out, ioe, | |||||
| location); | location); | ||||
| } | } | ||||
| } else if (outputprop != null) { | } else if (outputprop != null) { | ||||
| @@ -184,6 +184,10 @@ public class ExecuteOn extends ExecTask { | |||||
| return mapperElement; | 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() { | protected void checkConfiguration() { | ||||
| if ("execon".equals(taskName)) { | if ("execon".equals(taskName)) { | ||||
| log("!! execon is deprecated. Use apply instead. !!"); | log("!! execon is deprecated. Use apply instead. !!"); | ||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * 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. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * 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. | * if available. | ||||
| * | * | ||||
| * @author <a href="mailto:nico@seessle.de">Nico Seessle</a> | * @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" | * @ant.task name="fail" category="control" | ||||
| */ | */ | ||||
| public class Exit extends Task { | |||||
| public class Exit extends Task { | |||||
| private String message; | private String message; | ||||
| private String ifCondition, unlessCondition; | private String ifCondition, unlessCondition; | ||||
| @@ -100,7 +100,7 @@ public class Exit extends Task { | |||||
| public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
| if (testIfCondition() && testUnlessCondition()) { | if (testIfCondition() && testUnlessCondition()) { | ||||
| if (message != null && message.length() > 0) { | |||||
| if (message != null && message.length() > 0) { | |||||
| throw new BuildException(message); | throw new BuildException(message); | ||||
| } else { | } else { | ||||
| throw new BuildException("No message"); | throw new BuildException("No message"); | ||||
| @@ -122,7 +122,7 @@ public class Exit extends Task { | |||||
| if (ifCondition == null || "".equals(ifCondition)) { | if (ifCondition == null || "".equals(ifCondition)) { | ||||
| return true; | return true; | ||||
| } | } | ||||
| return project.getProperty(ifCondition) != null; | return project.getProperty(ifCondition) != null; | ||||
| } | } | ||||
| @@ -61,11 +61,11 @@ import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.Project; | 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. | * reading these from a file. | ||||
| * | * | ||||
| * @author Stefano Mazzocchi | |||||
| * @author Stefano Mazzocchi | |||||
| * <a href="mailto:stefano@apache.org">stefano@apache.org</a> | * <a href="mailto:stefano@apache.org">stefano@apache.org</a> | ||||
| * @author Gero Vermaas <a href="mailto:gero@xs4all.nl">gero@xs4all.nl</a> | * @author Gero Vermaas <a href="mailto:gero@xs4all.nl">gero@xs4all.nl</a> | ||||
| * @author <A href="gholam@xtra.co.nz">Michael McCallum</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 { | public void execute() throws BuildException { | ||||
| boolean isFiltersFromFile = | |||||
| boolean isFiltersFromFile = | |||||
| filtersFile != null && token == null && value == null; | filtersFile != null && token == null && value == null; | ||||
| boolean isSingleFilter = | |||||
| boolean isSingleFilter = | |||||
| filtersFile == null && token != null && value != null; | filtersFile == null && token != null && value != null; | ||||
| if (!isFiltersFromFile && !isSingleFilter) { | if (!isFiltersFromFile && !isSingleFilter) { | ||||
| throw new BuildException("both token and value parameters, or " | throw new BuildException("both token and value parameters, or " | ||||
| + "only a filtersFile parameter is " | + "only a filtersFile parameter is " | ||||
| + "required", location); | + "required", location); | ||||
| } | } | ||||
| if (isSingleFilter) { | if (isSingleFilter) { | ||||
| project.getGlobalFilterSet().addFilter(token, value); | project.getGlobalFilterSet().addFilter(token, value); | ||||
| } | } | ||||
| if (isFiltersFromFile) { | if (isFiltersFromFile) { | ||||
| readFilters(); | readFilters(); | ||||
| } | } | ||||
| } | } | ||||
| protected void readFilters() throws BuildException { | protected void readFilters() throws BuildException { | ||||
| log("Reading filters from " + filtersFile, Project.MSG_VERBOSE); | log("Reading filters from " + filtersFile, Project.MSG_VERBOSE); | ||||
| project.getGlobalFilterSet().readFiltersFromFile(filtersFile); | project.getGlobalFilterSet().readFiltersFromFile(filtersFile); | ||||
| @@ -449,7 +449,7 @@ public class FixCRLF extends MatchingTask { | |||||
| break; | break; | ||||
| case IN_MULTI_COMMENT: | case IN_MULTI_COMMENT: | ||||
| endComment | |||||
| endComment | |||||
| = lineString.indexOf("*/", line.getNext()); | = lineString.indexOf("*/", line.getNext()); | ||||
| if (endComment >= 0) { | if (endComment >= 0) { | ||||
| // End of multiLineComment on this line | // End of multiLineComment on this line | ||||
| @@ -486,7 +486,7 @@ public class FixCRLF extends MatchingTask { | |||||
| if (line.getNextCharInc() == '\t') { | if (line.getNextCharInc() == '\t') { | ||||
| line.setColumn(line.getColumn() + | line.setColumn(line.getColumn() + | ||||
| tablength - | tablength - | ||||
| (line.getColumn() | |||||
| (line.getColumn() | |||||
| % tablength)); | % tablength)); | ||||
| } else { | } else { | ||||
| line.incColumn(); | line.incColumn(); | ||||
| @@ -495,7 +495,7 @@ public class FixCRLF extends MatchingTask { | |||||
| // Now output the substring | // Now output the substring | ||||
| try { | try { | ||||
| outWriter.write(line.substring(begin, | |||||
| outWriter.write(line.substring(begin, | |||||
| line.getNext())); | line.getNext())); | ||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| throw new BuildException(e); | throw new BuildException(e); | ||||
| @@ -547,7 +547,7 @@ public class FixCRLF extends MatchingTask { | |||||
| lines.close(); | lines.close(); | ||||
| lines = null; | lines = null; | ||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| throw new BuildException("Unable to close source file " | |||||
| throw new BuildException("Unable to close source file " | |||||
| + srcFile); | + srcFile); | ||||
| } | } | ||||
| @@ -69,7 +69,7 @@ import org.apache.tools.ant.util.FileUtils; | |||||
| import org.apache.tools.ant.util.JavaEnvUtils; | 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 | * Options include verbose reporting, timestamp based fetches and controlling | ||||
| * actions on failures. NB: access through a firewall only works if the whole | * actions on failures. NB: access through a firewall only works if the whole | ||||
| * Java runtime is correctly configured. | * Java runtime is correctly configured. | ||||
| @@ -83,7 +83,7 @@ import java.sql.Statement; | |||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.taskdefs.JDBCTask; | import org.apache.tools.ant.taskdefs.JDBCTask; | ||||
| public class SQLExampleTask extends JDBCTask { | |||||
| public class SQLExampleTask extends JDBCTask { | |||||
| private String tableName; | private String tableName; | ||||
| @@ -93,7 +93,7 @@ public class SQLExampleTask extends JDBCTask { | |||||
| try { | try { | ||||
| if (tableName == null ) { | if (tableName == null ) { | ||||
| throw new BuildException("TableName must be specified",location); | throw new BuildException("TableName must be specified",location); | ||||
| } | |||||
| } | |||||
| String sql = "SELECT * FROM "+tableName; | String sql = "SELECT * FROM "+tableName; | ||||
| stmt= conn.createStatement(); | stmt= conn.createStatement(); | ||||
| ResultSet rs = stmt.executeQuery(sql); | ResultSet rs = stmt.executeQuery(sql); | ||||
| @@ -101,7 +101,7 @@ public class SQLExampleTask extends JDBCTask { | |||||
| log(rs.getObject(1).toString()); | log(rs.getObject(1).toString()); | ||||
| } | } | ||||
| } catch (SQLException e) { | } catch (SQLException e) { | ||||
| } finally { | } finally { | ||||
| if (stmt != null) { | if (stmt != null) { | ||||
| try {stmt.close();}catch (SQLException ingore){} | try {stmt.close();}catch (SQLException ingore){} | ||||
| @@ -117,7 +117,7 @@ public class SQLExampleTask extends JDBCTask { | |||||
| } | } | ||||
| </pre></code> | </pre></code> | ||||
| @@ -182,7 +182,7 @@ public abstract class JDBCTask extends Task { | |||||
| private String version = null; | private String version = null; | ||||
| /** | /** | ||||
| * Sets the classpath. | |||||
| * Sets the classpath for loading the driver. | |||||
| * @param classpath The classpath to set | * @param classpath The classpath to set | ||||
| */ | */ | ||||
| public void setClasspath(Path classpath) { | 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() { | public Path createClasspath() { | ||||
| if (this.classpath == null) { | 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. | * using the classpath reference. | ||||
| */ | */ | ||||
| public void setClasspathRef(Reference r) { | 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 | * @param driver The driver to set | ||||
| */ | */ | ||||
| public void setDriver(String driver) { | 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 | * @param url The url to set | ||||
| */ | */ | ||||
| public void setUrl(String url) { | public void setUrl(String url) { | ||||
| this.url = url; | this.url = url; | ||||
| } | } | ||||
| /** | |||||
| * Set the user name for the connection; required. | |||||
| */ | |||||
| public void setUserid(String userId) { | |||||
| this.userId = userId; | |||||
| } | |||||
| /** | /** | ||||
| * Sets the password; required. | * Sets the password; required. | ||||
| * @param password The password to set | * @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 | * of the DB matches this | ||||
| * @param rdbms The rdbms to set | * @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. | * rdbms version match; optional. | ||||
| * @param version The version to set | * @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 | * @param userId The userId to set | ||||
| */ | */ | ||||
| public void setUserId(String userId) { | |||||
| public void setUserid(String userId) { | |||||
| this.userId = userId; | this.userId = userId; | ||||
| } | } | ||||
| @@ -137,9 +137,7 @@ public class Jar extends Zip { | |||||
| } | } | ||||
| /** | /** | ||||
| * Not supported. | |||||
| * | |||||
| * @param we | |||||
| * @ant.attribute ignore="true" | |||||
| */ | */ | ||||
| public void setWhenempty(WhenEmpty we) { | public void setWhenempty(WhenEmpty we) { | ||||
| log("JARs are never empty, they contain at least a manifest file", | 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. | * @param config setting for found manifest behavior. | ||||
| */ | */ | ||||
| /* | |||||
| public void setFilesetmanifest(FilesetManifestConfig config) { | public void setFilesetmanifest(FilesetManifestConfig config) { | ||||
| filesetManifestConfig = config; | filesetManifestConfig = config; | ||||
| mergeManifestsMain = "merge".equals(config.getValue()); | mergeManifestsMain = "merge".equals(config.getValue()); | ||||
| } | } | ||||
| */ | |||||
| /** | /** | ||||
| * Adds a zipfileset to include in the META-INF directory. | * Adds a zipfileset to include in the META-INF directory. | ||||
| @@ -439,7 +439,13 @@ public class Jar extends Zip { | |||||
| Project.MSG_VERBOSE); | Project.MSG_VERBOSE); | ||||
| try { | 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) { | if (filesetManifest == null) { | ||||
| filesetManifest = newManifest; | filesetManifest = newManifest; | ||||
| } else { | } else { | ||||
| @@ -72,7 +72,7 @@ import java.io.IOException; | |||||
| import java.util.Vector; | 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 | * the same JVM for the called application thus resulting in much | ||||
| * faster operation. | * faster operation. | ||||
| * | * | ||||
| @@ -231,6 +231,7 @@ public class Java extends Task { | |||||
| /** | /** | ||||
| * Deprecated: use nested arg instead. | * Deprecated: use nested arg instead. | ||||
| * Set the command line arguments for the class. | * Set the command line arguments for the class. | ||||
| * @ant.attribute ignore="true" | |||||
| */ | */ | ||||
| public void setArgs(String s) { | public void setArgs(String s) { | ||||
| log("The args attribute is deprecated. " + | log("The args attribute is deprecated. " + | ||||
| @@ -97,7 +97,7 @@ import java.io.File; | |||||
| * compile decision based on timestamp. | * compile decision based on timestamp. | ||||
| * | * | ||||
| * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a> | * @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> | * <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:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
| * @author <a href="mailto:jayglanville@home.com">J D Glanville</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 | * If you use this attribute together with jikes, you must | ||||
| * make sure that your version of jikes supports the -source switch. | * 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. | * will be used at all. | ||||
| * | * | ||||
| * @param v Value to assign to source. | * @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. | * @return a nested src element. | ||||
| */ | */ | ||||
| @@ -296,7 +296,7 @@ public class Javac extends MatchingTask { | |||||
| /** | /** | ||||
| * Set the classpath to be used for this compilation. | * Set the classpath to be used for this compilation. | ||||
| * | |||||
| * | |||||
| * @param classpath an Ant Path object containing the compilation classpath. | * @param classpath an Ant Path object containing the compilation classpath. | ||||
| */ | */ | ||||
| public void setClasspath(Path 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) { | public void setProceed(boolean proceed) { | ||||
| failOnError = !proceed; | failOnError = !proceed; | ||||
| @@ -654,7 +653,7 @@ public class Javac extends MatchingTask { | |||||
| facade.setImplementation(chosen); | facade.setImplementation(chosen); | ||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| * Executes the task. | * Executes the task. | ||||
| @@ -669,8 +668,8 @@ public class Javac extends MatchingTask { | |||||
| for (int i = 0; i < list.length; i++) { | for (int i = 0; i < list.length; i++) { | ||||
| File srcDir = project.resolveFile(list[i]); | File srcDir = project.resolveFile(list[i]); | ||||
| if (!srcDir.exists()) { | if (!srcDir.exists()) { | ||||
| throw new BuildException("srcdir \"" | |||||
| + srcDir.getPath() | |||||
| throw new BuildException("srcdir \"" | |||||
| + srcDir.getPath() | |||||
| + "\" does not exist!", location); | + "\" 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 | * <p>If fork has been set to true, the result will be extJavac | ||||
| * and not classic or java1.2 - no matter what the compiler | * and not classic or java1.2 - no matter what the compiler | ||||
| * attribute looks like.</p> | * attribute looks like.</p> | ||||
| * | |||||
| * | |||||
| * @see #getCompilerVersion | * @see #getCompilerVersion | ||||
| * | |||||
| * | |||||
| * @since Ant 1.5 | * @since Ant 1.5 | ||||
| */ | */ | ||||
| public String getCompiler() { | public String getCompiler() { | ||||
| @@ -776,7 +775,7 @@ public class Javac extends MatchingTask { | |||||
| * | * | ||||
| * <p>This method does not take the fork attribute into | * <p>This method does not take the fork attribute into | ||||
| * account.</p> | * account.</p> | ||||
| * | |||||
| * | |||||
| * @see #getCompiler | * @see #getCompiler | ||||
| * | * | ||||
| * @since Ant 1.5 | * @since Ant 1.5 | ||||
| @@ -794,17 +793,17 @@ public class Javac extends MatchingTask { | |||||
| */ | */ | ||||
| protected void checkParameters() throws BuildException { | protected void checkParameters() throws BuildException { | ||||
| if (src == null) { | if (src == null) { | ||||
| throw new BuildException("srcdir attribute must be set!", | |||||
| throw new BuildException("srcdir attribute must be set!", | |||||
| location); | location); | ||||
| } | } | ||||
| if (src.size() == 0) { | if (src.size() == 0) { | ||||
| throw new BuildException("srcdir attribute must be set!", | |||||
| throw new BuildException("srcdir attribute must be set!", | |||||
| location); | location); | ||||
| } | } | ||||
| if (destDir != null && !destDir.isDirectory()) { | if (destDir != null && !destDir.isDirectory()) { | ||||
| throw new BuildException("destination directory \"" | |||||
| + destDir | |||||
| throw new BuildException("destination directory \"" | |||||
| + destDir | |||||
| + "\" does not exist " | + "\" does not exist " | ||||
| + "or is not a directory", location); | + "or is not a directory", location); | ||||
| } | } | ||||
| @@ -831,7 +830,7 @@ public class Javac extends MatchingTask { | |||||
| } | } | ||||
| } | } | ||||
| CompilerAdapter adapter = | |||||
| CompilerAdapter adapter = | |||||
| CompilerAdapterFactory.getCompiler(compilerImpl, this); | CompilerAdapterFactory.getCompiler(compilerImpl, this); | ||||
| // now we need to populate the compiler adapter | // 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 | * filter command line attributes based on the current | ||||
| * implementation. | * implementation. | ||||
| */ | */ | ||||
| public class ImplementationSpecificArgument extends | |||||
| public class ImplementationSpecificArgument extends | |||||
| org.apache.tools.ant.util.facade.ImplementationSpecificArgument { | org.apache.tools.ant.util.facade.ImplementationSpecificArgument { | ||||
| public void setCompiler(String impl) { | public void setCompiler(String impl) { | ||||
| @@ -1654,7 +1654,6 @@ public class Javadoc extends Task { | |||||
| } | } | ||||
| } | } | ||||
| if (la.isLinkOffline()) { | if (la.isLinkOffline()) { | ||||
| File packageListLocation = la.getPackagelistLoc(); | File packageListLocation = la.getPackagelistLoc(); | ||||
| if (packageListLocation == null) { | if (packageListLocation == null) { | ||||
| @@ -58,9 +58,6 @@ import java.util.Vector; | |||||
| import java.util.Hashtable; | import java.util.Hashtable; | ||||
| import java.util.Enumeration; | import java.util.Enumeration; | ||||
| import java.io.BufferedReader; | import java.io.BufferedReader; | ||||
| import java.io.File; | |||||
| import java.io.FileReader; | |||||
| import java.io.FileWriter; | |||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import java.io.InputStream; | import java.io.InputStream; | ||||
| import java.io.InputStreamReader; | import java.io.InputStreamReader; | ||||
| @@ -70,16 +67,11 @@ import java.io.StringWriter; | |||||
| import java.io.UnsupportedEncodingException; | import java.io.UnsupportedEncodingException; | ||||
| import org.apache.tools.ant.BuildException; | 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; | 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 | * Manifests are processed according to the | ||||
| * {@link <a href="http://java.sun.com/j2se/1.4/docs/guide/jar/jar.html">Jar | * {@link <a href="http://java.sun.com/j2se/1.4/docs/guide/jar/jar.html">Jar | ||||
| * file specification.</a>}. | * 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 | * greater than 72 bytes being wrapped and continued on the next | ||||
| * line. If an application can not handle the continuation mechanism, it | * line. If an application can not handle the continuation mechanism, it | ||||
| * is a defect in the application, not this task. | * is a defect in the application, not this task. | ||||
| * @author Conor MacNeill | * @author Conor MacNeill | ||||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
| * @author <a href="mailto:j_a_fernandez@yahoo.com">Jose Alberto Fernandez</a> | * @author <a href="mailto:j_a_fernandez@yahoo.com">Jose Alberto Fernandez</a> | ||||
| * | * | ||||
| * @since Ant 1.4 | * @since Ant 1.4 | ||||
| * | |||||
| * @ant.task category="java" | |||||
| */ | */ | ||||
| public class Manifest extends Task { | |||||
| public class Manifest { | |||||
| /** The standard manifest version header */ | /** The standard manifest version header */ | ||||
| public static final String ATTRIBUTE_MANIFEST_VERSION | public static final String ATTRIBUTE_MANIFEST_VERSION | ||||
| = "Manifest-Version"; | = "Manifest-Version"; | ||||
| @@ -131,20 +120,6 @@ public class Manifest extends Task { | |||||
| /** The End-Of-Line marker in manifests */ | /** The End-Of-Line marker in manifests */ | ||||
| public static final String EOL = "\r\n"; | 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. | * An attribute for the manifest. | ||||
| * Those attributes that are not nested into a section will be added to the "Main" section. | * 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; | 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 */ | /** Index of sections - used to retain order of sections in manifest */ | ||||
| private Vector sectionIndex = new Vector(); | 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. | * Construct a manifest from Ant's default manifest file. | ||||
| * | * | ||||
| @@ -760,8 +725,6 @@ public class Manifest extends Task { | |||||
| /** Construct an empty manifest */ | /** Construct an empty manifest */ | ||||
| public Manifest() { | public Manifest() { | ||||
| mode = new Mode(); | |||||
| mode.setValue("replace"); | |||||
| manifestVersion = null; | manifestVersion = null; | ||||
| } | } | ||||
| @@ -843,7 +806,14 @@ public class Manifest extends Task { | |||||
| */ | */ | ||||
| public void addConfiguredAttribute(Attribute attribute) | public void addConfiguredAttribute(Attribute attribute) | ||||
| throws ManifestException { | 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 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() { | public Enumeration getSectionNames() { | ||||
| return sectionIndex.elements(); | 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(); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -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(); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -66,12 +66,12 @@ import java.util.StringTokenizer; | |||||
| import java.util.Enumeration; | 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. | * 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> | * <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 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> | * @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() { | public PatternSet.NameEntry createInclude() { | ||||
| return fileset.createInclude(); | return fileset.createInclude(); | ||||
| } | } | ||||
| /** | /** | ||||
| * add a name entry on the include files list | * add a name entry on the include files list | ||||
| */ | */ | ||||
| public PatternSet.NameEntry createIncludesFile() { | public PatternSet.NameEntry createIncludesFile() { | ||||
| return fileset.createIncludesFile(); | return fileset.createIncludesFile(); | ||||
| } | } | ||||
| /** | /** | ||||
| * add a name entry on the exclude list | * add a name entry on the exclude list | ||||
| */ | */ | ||||
| @@ -120,7 +120,7 @@ public abstract class MatchingTask extends Task implements SelectorContainer { | |||||
| public PatternSet.NameEntry createExcludesFile() { | public PatternSet.NameEntry createExcludesFile() { | ||||
| return fileset.createExcludesFile(); | return fileset.createExcludesFile(); | ||||
| } | } | ||||
| /** | /** | ||||
| * add a set of patterns | * add a set of patterns | ||||
| */ | */ | ||||
| @@ -149,7 +149,7 @@ public abstract class MatchingTask extends Task implements SelectorContainer { | |||||
| log("The items attribute is deprecated. " + | log("The items attribute is deprecated. " + | ||||
| "Please use the includes attribute.", | "Please use the includes attribute.", | ||||
| Project.MSG_WARN); | Project.MSG_WARN); | ||||
| if (itemString == null || itemString.equals("*") | |||||
| if (itemString == null || itemString.equals("*") | |||||
| || itemString.equals(".")) { | || itemString.equals(".")) { | ||||
| createInclude().setName("**"); | createInclude().setName("**"); | ||||
| } else { | } 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 | * Sets the set of exclude patterns. Patterns may be separated by a comma | ||||
| * or a space. | * 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. | * either , or " " (space) separated. The ignored files will be logged. | ||||
| * | * | ||||
| * @param ignoreString the string containing the files to ignore. | * @param ignoreString the string containing the files to ignore. | ||||
| @@ -232,6 +232,25 @@ public abstract class MatchingTask extends Task implements SelectorContainer { | |||||
| fileset.setExcludesfile(excludesfile); | 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. | * Indicates whether there are any selectors here. | ||||
| * | * | ||||
| @@ -69,7 +69,7 @@ import java.util.Vector; | |||||
| import java.io.File; | 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. | * format. The resulting formatted path is placed into the specified property. | ||||
| * | * | ||||
| * @author Larry Streepy <a href="mailto:streepy@healthlanguage.com"> | * @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 | * Set if we're running on windows | ||||
| */ | */ | ||||
| private boolean onWindows = false; | 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 | * The property to receive the conversion | ||||
| */ | */ | ||||
| @@ -268,6 +272,17 @@ public class PathConvert extends Task { | |||||
| targetWindows = !targetOS.equals("unix"); | 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. | * 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 { | } finally { | ||||
| path = savedPath; | path = savedPath; | ||||
| dirSep = savedDirSep; | dirSep = savedDirSep; | ||||
| @@ -162,12 +162,10 @@ public class Property extends Task { | |||||
| * Sets the value of the property. | * Sets the value of the property. | ||||
| * @param value value to assign | * @param value value to assign | ||||
| */ | */ | ||||
| public void setValue(String value) { | public void setValue(String value) { | ||||
| this.value = value; | this.value = value; | ||||
| } | } | ||||
| public String getValue() { | public String getValue() { | ||||
| return value; | return value; | ||||
| } | } | ||||
| @@ -250,7 +248,6 @@ public class Property extends Task { | |||||
| * will be ${env.Path} not ${env.PATH} on Windows 2000. | * will be ${env.Path} not ${env.PATH} on Windows 2000. | ||||
| * @param env prefix | * @param env prefix | ||||
| */ | */ | ||||
| public void setEnvironment(String env) { | public void setEnvironment(String env) { | ||||
| this.env = env; | this.env = env; | ||||
| } | } | ||||
| @@ -262,12 +259,10 @@ public class Property extends Task { | |||||
| return env; | return env; | ||||
| } | } | ||||
| /** | /** | ||||
| * The classpath to use when looking up a resource. | * The classpath to use when looking up a resource. | ||||
| * @param classpath to add to any existing classpath | * @param classpath to add to any existing classpath | ||||
| */ | */ | ||||
| public void setClasspath(Path classpath) { | public void setClasspath(Path classpath) { | ||||
| if (this.classpath == null) { | if (this.classpath == null) { | ||||
| this.classpath = classpath; | this.classpath = classpath; | ||||
| @@ -67,7 +67,7 @@ import java.io.IOException; | |||||
| import java.util.Hashtable; | 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. | * output to a file. | ||||
| * <p>Several recorders can exist at the same time. Each recorder is | * <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 | * 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 "finished" | * <p>Some technical issues: the file's print stream is flushed for "finished" | ||||
| * events (buildFinished, targetFinished and taskFinished), and is closed on | * events (buildFinished, targetFinished and taskFinished), and is closed on | ||||
| * a buildFinished event.</p> | * a buildFinished event.</p> | ||||
| * @author <a href="mailto:jayglanville@home.com">J D Glanville</a> | * @author <a href="mailto:jayglanville@home.com">J D Glanville</a> | ||||
| * @see RecorderEntry | * @see RecorderEntry | ||||
| * @version 0.5 | * @version 0.5 | ||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * 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. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
| @@ -54,15 +54,10 @@ | |||||
| package org.apache.tools.ant.taskdefs; | 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.BuildException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | import org.apache.tools.ant.DirectoryScanner; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | 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 org.apache.tools.ant.types.FileSet; | ||||
| import java.io.File; | import java.io.File; | ||||
| @@ -79,39 +74,36 @@ import java.io.FileInputStream; | |||||
| import java.util.Enumeration; | import java.util.Enumeration; | ||||
| import java.util.StringTokenizer; | import java.util.StringTokenizer; | ||||
| import java.util.Vector; | import java.util.Vector; | ||||
| import java.util.Properties; | |||||
| import java.util.Hashtable; | |||||
| import java.sql.Connection; | import java.sql.Connection; | ||||
| import java.sql.Statement; | import java.sql.Statement; | ||||
| import java.sql.Driver; | |||||
| import java.sql.SQLException; | import java.sql.SQLException; | ||||
| import java.sql.DatabaseMetaData; | |||||
| import java.sql.SQLWarning; | import java.sql.SQLWarning; | ||||
| import java.sql.ResultSet; | import java.sql.ResultSet; | ||||
| import java.sql.ResultSetMetaData; | 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> | * 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> | * 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> | * 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; | * The possible values are: <b>continue</b> execution, only show the error; | ||||
| * <b>stop</b> execution and commit transaction; | * <b>stop</b> execution and commit transaction; | ||||
| * and <b>abort</b> execution and transaction and fail task.</p> | * 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:jeff@custommonkey.org">Jeff Martin</a> | ||||
| * @author <A href="mailto:gholam@xtra.co.nz">Michael McCallum</A> | * @author <A href="mailto:gholam@xtra.co.nz">Michael McCallum</A> | ||||
| * @author <A href="mailto:tim.stephenson@sybase.com">Tim Stephenson</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 goodSql = 0; | ||||
| private int totalSql = 0; | private int totalSql = 0; | ||||
| /** | |||||
| /** | |||||
| * Database connection | * Database connection | ||||
| */ | */ | ||||
| private Connection conn = null; | private Connection conn = null; | ||||
| @@ -173,13 +165,13 @@ public class SQLExec extends JDBCTask { | |||||
| * SQL Statement delimiter | * SQL Statement delimiter | ||||
| */ | */ | ||||
| private String delimiter = ";"; | private String delimiter = ";"; | ||||
| /** | /** | ||||
| * The delimiter type indicating whether the delimiter will | * The delimiter type indicating whether the delimiter will | ||||
| * only be recognized on a line by itself | * only be recognized on a line by itself | ||||
| */ | */ | ||||
| private String delimiterType = DelimiterType.NORMAL; | private String delimiterType = DelimiterType.NORMAL; | ||||
| /** | /** | ||||
| * Print SQL results. | * Print SQL results. | ||||
| */ | */ | ||||
| @@ -195,12 +187,12 @@ public class SQLExec extends JDBCTask { | |||||
| */ | */ | ||||
| private File output = null; | private File output = null; | ||||
| /** | /** | ||||
| * Action to perform if an error is found | * Action to perform if an error is found | ||||
| **/ | **/ | ||||
| private String onError = "abort"; | private String onError = "abort"; | ||||
| /** | /** | ||||
| * Encoding to use when reading SQL statements from a file | * Encoding to use when reading SQL statements from a file | ||||
| */ | */ | ||||
| @@ -211,23 +203,23 @@ public class SQLExec extends JDBCTask { | |||||
| */ | */ | ||||
| private boolean append = false; | 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 | * Required unless statements are enclosed in the build file | ||||
| */ | */ | ||||
| public void setSrc(File srcFile) { | public void setSrc(File srcFile) { | ||||
| this.srcFile = 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. | * NB: Properties are not expanded in this text. | ||||
| */ | */ | ||||
| public void addText(String sql) { | public void addText(String sql) { | ||||
| this.sqlCommand += sql; | this.sqlCommand += sql; | ||||
| } | } | ||||
| /** | /** | ||||
| * Adds a set of files (nested fileset attribute). | * Adds a set of files (nested fileset attribute). | ||||
| */ | */ | ||||
| @@ -244,7 +236,7 @@ public class SQLExec extends JDBCTask { | |||||
| transactions.addElement(t); | transactions.addElement(t); | ||||
| return t; | return t; | ||||
| } | } | ||||
| /** | /** | ||||
| * Set the file encoding to use on the SQL files read in | * 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) { | public void setEncoding(String encoding) { | ||||
| this.encoding = encoding; | this.encoding = encoding; | ||||
| } | } | ||||
| /** | /** | ||||
| * Set the delimiter that separates SQL statements; | |||||
| * Set the delimiter that separates SQL statements; | |||||
| * optional, default ";" | * optional, default ";" | ||||
| * | * | ||||
| * <p>For example, set this to "go" and delimitertype to "ROW" for | * <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 | * <p>The delimiter type takes two values - normal and row. Normal | ||||
| * means that any occurence of the delimiter terminate the SQL | * means that any occurence of the delimiter terminate the SQL | ||||
| @@ -276,7 +268,7 @@ public class SQLExec extends JDBCTask { | |||||
| public void setDelimiterType(DelimiterType delimiterType) { | public void setDelimiterType(DelimiterType delimiterType) { | ||||
| this.delimiterType = delimiterType.getValue(); | this.delimiterType = delimiterType.getValue(); | ||||
| } | } | ||||
| /** | /** | ||||
| * Print result sets from the statements; | * Print result sets from the statements; | ||||
| * optional, default false | * optional, default false | ||||
| @@ -284,9 +276,9 @@ public class SQLExec extends JDBCTask { | |||||
| public void setPrint(boolean print) { | public void setPrint(boolean print) { | ||||
| this.print = print; | this.print = print; | ||||
| } | } | ||||
| /** | /** | ||||
| * Print headers for result sets from the | |||||
| * Print headers for result sets from the | |||||
| * statements; optional, default true. | * statements; optional, default true. | ||||
| */ | */ | ||||
| public void setShowheaders(boolean showheaders) { | 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) { | public void setOutput(File output) { | ||||
| this.output = output; | this.output = output; | ||||
| @@ -311,7 +303,7 @@ public class SQLExec extends JDBCTask { | |||||
| this.append = append; | this.append = append; | ||||
| } | } | ||||
| /** | /** | ||||
| * Action to perform when statement fails: continue, stop, or abort | * Action to perform when statement fails: continue, stop, or abort | ||||
| * optional; default "abort" | * optional; default "abort" | ||||
| @@ -330,15 +322,15 @@ public class SQLExec extends JDBCTask { | |||||
| sqlCommand = sqlCommand.trim(); | sqlCommand = sqlCommand.trim(); | ||||
| try { | try { | ||||
| if (srcFile == null && sqlCommand.length() == 0 | |||||
| && filesets.isEmpty()) { | |||||
| if (srcFile == null && sqlCommand.length() == 0 | |||||
| && filesets.isEmpty()) { | |||||
| if (transactions.size() == 0) { | if (transactions.size() == 0) { | ||||
| throw new BuildException("Source file or fileset, " | throw new BuildException("Source file or fileset, " | ||||
| + "transactions or sql statement " | + "transactions or sql statement " | ||||
| + "must be set!", location); | + "must be set!", location); | ||||
| } | } | ||||
| } | } | ||||
| if (srcFile != null && !srcFile.exists()) { | if (srcFile != null && !srcFile.exists()) { | ||||
| throw new BuildException("Source file does not exist!", location); | throw new BuildException("Source file does not exist!", location); | ||||
| } | } | ||||
| @@ -348,16 +340,16 @@ public class SQLExec extends JDBCTask { | |||||
| FileSet fs = (FileSet) filesets.elementAt(i); | FileSet fs = (FileSet) filesets.elementAt(i); | ||||
| DirectoryScanner ds = fs.getDirectoryScanner(project); | DirectoryScanner ds = fs.getDirectoryScanner(project); | ||||
| File srcDir = fs.getDir(project); | File srcDir = fs.getDir(project); | ||||
| String[] srcFiles = ds.getIncludedFiles(); | String[] srcFiles = ds.getIncludedFiles(); | ||||
| // Make a transaction for each file | // Make a transaction for each file | ||||
| for (int j = 0 ; j < srcFiles.length ; j++) { | for (int j = 0 ; j < srcFiles.length ; j++) { | ||||
| Transaction t = createTransaction(); | Transaction t = createTransaction(); | ||||
| t.setSrc(new File(srcDir, srcFiles[j])); | t.setSrc(new File(srcDir, srcFiles[j])); | ||||
| } | } | ||||
| } | } | ||||
| // Make a transaction group for the outer command | // Make a transaction group for the outer command | ||||
| Transaction t = createTransaction(); | Transaction t = createTransaction(); | ||||
| t.setSrc(srcFile); | t.setSrc(srcFile); | ||||
| @@ -369,11 +361,11 @@ public class SQLExec extends JDBCTask { | |||||
| try { | try { | ||||
| statement = conn.createStatement(); | statement = conn.createStatement(); | ||||
| PrintStream out = System.out; | PrintStream out = System.out; | ||||
| try { | try { | ||||
| if (output != null) { | if (output != null) { | ||||
| log("Opening PrintStream to output file " + output, | |||||
| log("Opening PrintStream to output file " + output, | |||||
| Project.MSG_VERBOSE); | Project.MSG_VERBOSE); | ||||
| out = new PrintStream( | out = new PrintStream( | ||||
| new BufferedOutputStream( | new BufferedOutputStream( | ||||
| @@ -381,11 +373,11 @@ public class SQLExec extends JDBCTask { | |||||
| .getAbsolutePath(), | .getAbsolutePath(), | ||||
| append))); | append))); | ||||
| } | } | ||||
| // Process all transactions | // Process all transactions | ||||
| for (Enumeration e = transactions.elements(); | |||||
| for (Enumeration e = transactions.elements(); | |||||
| e.hasMoreElements();) { | e.hasMoreElements();) { | ||||
| ((Transaction) e.nextElement()).runTransaction(out); | ((Transaction) e.nextElement()).runTransaction(out); | ||||
| if (!isAutocommit()) { | if (!isAutocommit()) { | ||||
| log("Commiting transaction", Project.MSG_VERBOSE); | log("Commiting transaction", Project.MSG_VERBOSE); | ||||
| @@ -396,7 +388,7 @@ public class SQLExec extends JDBCTask { | |||||
| if (out != null && out != System.out) { | if (out != null && out != System.out) { | ||||
| out.close(); | out.close(); | ||||
| } | } | ||||
| } | |||||
| } | |||||
| } catch (IOException e){ | } catch (IOException e){ | ||||
| if (!isAutocommit() && conn != null && onError.equals("abort")) { | if (!isAutocommit() && conn != null && onError.equals("abort")) { | ||||
| try { | try { | ||||
| @@ -421,8 +413,8 @@ public class SQLExec extends JDBCTask { | |||||
| } | } | ||||
| } catch (SQLException e) {} | } catch (SQLException e) {} | ||||
| } | } | ||||
| log(goodSql + " of " + totalSql + | |||||
| log(goodSql + " of " + totalSql + | |||||
| " SQL statements executed successfully"); | " SQL statements executed successfully"); | ||||
| } finally { | } finally { | ||||
| transactions = savedTransaction; | transactions = savedTransaction; | ||||
| @@ -434,13 +426,13 @@ public class SQLExec extends JDBCTask { | |||||
| /** | /** | ||||
| * read in lines and execute them | * read in lines and execute them | ||||
| */ | */ | ||||
| protected void runStatements(Reader reader, PrintStream out) | |||||
| protected void runStatements(Reader reader, PrintStream out) | |||||
| throws SQLException, IOException { | throws SQLException, IOException { | ||||
| String sql = ""; | String sql = ""; | ||||
| String line = ""; | String line = ""; | ||||
| BufferedReader in = new BufferedReader(reader); | BufferedReader in = new BufferedReader(reader); | ||||
| while ((line = in.readLine()) != null){ | while ((line = in.readLine()) != null){ | ||||
| line = line.trim(); | line = line.trim(); | ||||
| line = project.replaceProperties(line); | line = project.replaceProperties(line); | ||||
| @@ -457,36 +449,36 @@ public class SQLExec extends JDBCTask { | |||||
| continue; | continue; | ||||
| } | } | ||||
| } | } | ||||
| sql += " " + line; | sql += " " + line; | ||||
| sql = sql.trim(); | sql = sql.trim(); | ||||
| // SQL defines "--" as a comment to EOL | // SQL defines "--" as a comment to EOL | ||||
| // and in Oracle it may contain a hint | // and in Oracle it may contain a hint | ||||
| // so we cannot just remove it, instead we must end it | // so we cannot just remove it, instead we must end it | ||||
| if (line.indexOf("--") >= 0) { | if (line.indexOf("--") >= 0) { | ||||
| sql += "\n"; | 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))) { | && line.equals(delimiter))) { | ||||
| log("SQL: " + sql, Project.MSG_VERBOSE); | log("SQL: " + sql, Project.MSG_VERBOSE); | ||||
| execSQL(sql.substring(0, sql.length() - delimiter.length()), | |||||
| execSQL(sql.substring(0, sql.length() - delimiter.length()), | |||||
| out); | out); | ||||
| sql = ""; | sql = ""; | ||||
| } | } | ||||
| } | } | ||||
| // Catch any statements not followed by ; | // Catch any statements not followed by ; | ||||
| if (!sql.equals("")){ | if (!sql.equals("")){ | ||||
| execSQL(sql, out); | execSQL(sql, out); | ||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| * Exec the sql statement. | * Exec the sql statement. | ||||
| */ | */ | ||||
| @@ -495,18 +487,18 @@ public class SQLExec extends JDBCTask { | |||||
| if ("".equals(sql.trim())) { | if ("".equals(sql.trim())) { | ||||
| return; | return; | ||||
| } | } | ||||
| try { | |||||
| try { | |||||
| totalSql++; | totalSql++; | ||||
| if (!statement.execute(sql)) { | if (!statement.execute(sql)) { | ||||
| log(statement.getUpdateCount() + " rows affected", | |||||
| log(statement.getUpdateCount() + " rows affected", | |||||
| Project.MSG_VERBOSE); | Project.MSG_VERBOSE); | ||||
| } else { | } else { | ||||
| if (print) { | if (print) { | ||||
| printResults(out); | printResults(out); | ||||
| } | } | ||||
| } | } | ||||
| SQLWarning warning = conn.getWarnings(); | SQLWarning warning = conn.getWarnings(); | ||||
| while (warning != null){ | while (warning != null){ | ||||
| log(warning + " sql warning", Project.MSG_VERBOSE); | log(warning + " sql warning", Project.MSG_VERBOSE); | ||||
| @@ -522,7 +514,7 @@ public class SQLExec extends JDBCTask { | |||||
| log(e.toString(), Project.MSG_ERR); | log(e.toString(), Project.MSG_ERR); | ||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| * print any results in the statement. | * print any results in the statement. | ||||
| */ | */ | ||||
| @@ -551,7 +543,7 @@ public class SQLExec extends JDBCTask { | |||||
| if (columnValue != null) { | if (columnValue != null) { | ||||
| columnValue = columnValue.trim(); | columnValue = columnValue.trim(); | ||||
| } | } | ||||
| if (first) { | if (first) { | ||||
| first = false; | first = false; | ||||
| } else { | } else { | ||||
| @@ -605,20 +597,20 @@ public class SQLExec extends JDBCTask { | |||||
| /** | /** | ||||
| * | * | ||||
| */ | */ | ||||
| private void runTransaction(PrintStream out) | |||||
| private void runTransaction(PrintStream out) | |||||
| throws IOException, SQLException { | throws IOException, SQLException { | ||||
| if (tSqlCommand.length() != 0) { | if (tSqlCommand.length() != 0) { | ||||
| log("Executing commands", Project.MSG_INFO); | log("Executing commands", Project.MSG_INFO); | ||||
| runStatements(new StringReader(tSqlCommand), out); | runStatements(new StringReader(tSqlCommand), out); | ||||
| } | } | ||||
| if (tSrcFile != null) { | if (tSrcFile != null) { | ||||
| log("Executing file: " + tSrcFile.getAbsolutePath(), | |||||
| log("Executing file: " + tSrcFile.getAbsolutePath(), | |||||
| Project.MSG_INFO); | Project.MSG_INFO); | ||||
| Reader reader = | |||||
| Reader reader = | |||||
| (encoding == null) ? new FileReader(tSrcFile) | (encoding == null) ? new FileReader(tSrcFile) | ||||
| : new InputStreamReader( | : new InputStreamReader( | ||||
| new FileInputStream(tSrcFile), | |||||
| new FileInputStream(tSrcFile), | |||||
| encoding); | encoding); | ||||
| try { | try { | ||||
| runStatements(reader, out); | runStatements(reader, out); | ||||
| @@ -58,18 +58,19 @@ import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.BuildException; | 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 | * A task for sleeping a short period of time, useful when a | ||||
| * build or deployment process requires an interval between tasks. | * build or deployment process requires an interval between tasks. | ||||
| *<p> | *<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 | * is positive, pending fundamental changes in physics and JVM | ||||
| * execution tims</p> | * 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> | * measuring how long a sleep actually took.</p> | ||||
| * | |||||
| * | |||||
| * @author steve_l@iseran.com steve loughran | * @author steve_l@iseran.com steve loughran | ||||
| * @since Ant 1.4 | * @since Ant 1.4 | ||||
| * @ant.task category="utility" | * @ant.task category="utility" | ||||
| @@ -87,7 +88,7 @@ public class Sleep extends Task { | |||||
| private int seconds = 0; | private int seconds = 0; | ||||
| /** | /** | ||||
| * sleep hours | |||||
| * sleep hours | |||||
| */ | */ | ||||
| private int hours = 0; | 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 | * @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 | * @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 | * @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 | * @param milliseconds The new Milliseconds value | ||||
| */ | */ | ||||
| @@ -179,7 +180,7 @@ public class Sleep extends Task { | |||||
| */ | */ | ||||
| private long getSleepTime() { | private long getSleepTime() { | ||||
| return ((((long) hours * 60) + minutes) * 60 + seconds) * 1000 | |||||
| return ((((long) hours * 60) + minutes) * 60 + seconds) * 1000 | |||||
| + milliseconds; | + milliseconds; | ||||
| } | } | ||||
| @@ -189,7 +190,7 @@ public class Sleep extends Task { | |||||
| * | * | ||||
| * @throws BuildException if something is invalid | * @throws BuildException if something is invalid | ||||
| */ | */ | ||||
| public void validate() | |||||
| public void validate() | |||||
| throws BuildException { | throws BuildException { | ||||
| if (getSleepTime() < 0) { | if (getSleepTime() < 0) { | ||||
| throw new BuildException("Negative sleep periods are not " | throw new BuildException("Negative sleep periods are not " | ||||
| @@ -57,6 +57,7 @@ package org.apache.tools.ant.taskdefs; | |||||
| /** | /** | ||||
| * Has been merged into ExecuteOn, empty class for backwards compatibility. | * 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 {} | public class Transform extends ExecuteOn {} | ||||
| @@ -72,7 +72,7 @@ import java.util.Vector; | |||||
| import java.text.SimpleDateFormat; | 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; | * The default properties are TSTAMP, DSTAMP and TODAY; | ||||
| * | * | ||||
| * @author costin@dnt.ro | * @author costin@dnt.ro | ||||
| @@ -204,7 +204,7 @@ public class Tstamp extends Task { | |||||
| if (st.hasMoreElements()) { | if (st.hasMoreElements()) { | ||||
| variant = st.nextToken(); | variant = st.nextToken(); | ||||
| if (st.hasMoreElements()) { | if (st.hasMoreElements()) { | ||||
| throw new BuildException("bad locale format", | |||||
| throw new BuildException("bad locale format", | |||||
| getLocation()); | getLocation()); | ||||
| } | } | ||||
| } | } | ||||
| @@ -212,7 +212,7 @@ public class Tstamp extends Task { | |||||
| country = ""; | country = ""; | ||||
| } | } | ||||
| } catch (NoSuchElementException e) { | } catch (NoSuchElementException e) { | ||||
| throw new BuildException("bad locale format", e, | |||||
| throw new BuildException("bad locale format", e, | |||||
| getLocation()); | getLocation()); | ||||
| } | } | ||||
| } | } | ||||
| @@ -70,7 +70,7 @@ import java.util.Enumeration; | |||||
| import java.util.Vector; | 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. | * greater than all of the source files. | ||||
| * | * | ||||
| * @author William Ferguson | * @author William Ferguson | ||||
| @@ -68,7 +68,7 @@ import java.io.IOException; | |||||
| * Contains special treatment for files that should end up in the | * 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/lib</code>, <code>WEB-INF/classes</code> or | ||||
| * <code>WEB-INF</code> directories of the Web Application Archive.</p> | * <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> | * 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> | * 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> | * <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 | * our web.xml deployment descriptor | ||||
| */ | */ | ||||
| private File deploymentDescriptor; | private File deploymentDescriptor; | ||||
| /** | /** | ||||
| * flag set if the descriptor is added | * 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 | * @deprecated Use setDestFile(File) instead | ||||
| * @ant.attribute ignored="true" | |||||
| * @ant.attribute ignore="true" | |||||
| */ | */ | ||||
| public void setWarfile(File warFile) { | public void setWarfile(File warFile) { | ||||
| setDestFile(warFile); | setDestFile(warFile); | ||||
| @@ -115,8 +115,8 @@ public class War extends Jar { | |||||
| public void setWebxml(File descr) { | public void setWebxml(File descr) { | ||||
| deploymentDescriptor = descr; | deploymentDescriptor = descr; | ||||
| if (!deploymentDescriptor.exists()) { | if (!deploymentDescriptor.exists()) { | ||||
| throw new BuildException("Deployment descriptor: " | |||||
| + deploymentDescriptor | |||||
| throw new BuildException("Deployment descriptor: " | |||||
| + deploymentDescriptor | |||||
| + " does not exist."); | + " does not exist."); | ||||
| } | } | ||||
| @@ -131,7 +131,7 @@ public class War extends Jar { | |||||
| /** | /** | ||||
| * add files under WEB-INF/lib/ | * add files under WEB-INF/lib/ | ||||
| */ | */ | ||||
| public void addLib(ZipFileSet fs) { | public void addLib(ZipFileSet fs) { | ||||
| // We just set the prefix for this fileset, and pass it up. | // We just set the prefix for this fileset, and pass it up. | ||||
| fs.setPrefix("WEB-INF/lib/"); | 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) { | public void addWebinf(ZipFileSet fs) { | ||||
| // We just set the prefix for this fileset, and pass it up. | // 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 | // it's being added twice, meaning the same file is specified | ||||
| // by the "webxml" attribute and in a <fileset> element. | // by the "webxml" attribute and in a <fileset> element. | ||||
| if (vPath.equalsIgnoreCase("WEB-INF/web.xml")) { | if (vPath.equalsIgnoreCase("WEB-INF/web.xml")) { | ||||
| if (deploymentDescriptor == null | |||||
| || !deploymentDescriptor.equals(file) | |||||
| if (deploymentDescriptor == null | |||||
| || !deploymentDescriptor.equals(file) | |||||
| || descriptorAdded) { | || descriptorAdded) { | ||||
| log("Warning: selected " + archiveType | log("Warning: selected " + archiveType | ||||
| + " files include a WEB-INF/web.xml which will be ignored " | + " files include a WEB-INF/web.xml which will be ignored " | ||||
| @@ -92,15 +92,6 @@ public interface XSLTLiaison { | |||||
| */ | */ | ||||
| void addParam(String name, String expression) throws Exception; | 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. | * Perform the transformation of a file into another. | ||||
| * @param infile the input file, probably an XML one. :-) | * @param infile the input file, probably an XML one. :-) | ||||
| @@ -62,6 +62,7 @@ import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.DirectoryScanner; | import org.apache.tools.ant.DirectoryScanner; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.AntClassLoader; | 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.Path; | ||||
| import org.apache.tools.ant.types.Reference; | import org.apache.tools.ant.types.Reference; | ||||
| import org.apache.tools.ant.util.FileUtils; | import org.apache.tools.ant.util.FileUtils; | ||||
| @@ -69,7 +70,7 @@ import org.apache.tools.ant.types.XMLCatalog; | |||||
| import org.xml.sax.EntityResolver; | 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. | * useful for building views of XML based documentation. | ||||
| * | * | ||||
| * @version $Revision$ | * @version $Revision$ | ||||
| @@ -127,7 +128,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
| private FileUtils fileUtils; | private FileUtils fileUtils; | ||||
| /** XSL output method to be used */ | /** XSL output method to be used */ | ||||
| private String outputtype = null; | |||||
| private Vector outputProperties = new Vector(); | |||||
| /** for resolving entities such as dtds */ | /** for resolving entities such as dtds */ | ||||
| private XMLCatalog xmlCatalog = new XMLCatalog(); | private XMLCatalog xmlCatalog = new XMLCatalog(); | ||||
| @@ -137,11 +138,11 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
| "org.apache.tools.ant.taskdefs.optional.TraXLiaison"; | "org.apache.tools.ant.taskdefs.optional.TraXLiaison"; | ||||
| /** Name of the now-deprecated XSLP Liason class */ | /** 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"; | "org.apache.tools.ant.taskdefs.optional.XslpLiaison"; | ||||
| /** Name of the Xalan liason class */ | /** 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"; | "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 | * Name of the stylesheet to use - given either relative | ||||
| * to the project's basedir or as an absolute path; required. | * to the project's basedir or as an absolute path; required. | ||||
| * | |||||
| * @param xslFile the stylesheet to use | |||||
| */ | */ | ||||
| public void setStyle(String xslFile) { | public void setStyle(String xslFile) { | ||||
| this.xslFile = xslFile; | this.xslFile = xslFile; | ||||
| @@ -371,10 +370,10 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
| } else if (proc.equals("xslp")) { | } else if (proc.equals("xslp")) { | ||||
| log("DEPRECATED - xslp processor is deprecated. Use trax or " | log("DEPRECATED - xslp processor is deprecated. Use trax or " | ||||
| + "xalan instead."); | + "xalan instead."); | ||||
| final Class clazz = loadClass(XSLP_LIASON_CLASS); | |||||
| final Class clazz = loadClass(XSLP_LIAISON_CLASS); | |||||
| liaison = (XSLTLiaison) clazz.newInstance(); | liaison = (XSLTLiaison) clazz.newInstance(); | ||||
| } else if (proc.equals("xalan")) { | } else if (proc.equals("xalan")) { | ||||
| final Class clazz = loadClass(XALAN_LIASON_CLASS); | |||||
| final Class clazz = loadClass(XALAN_LIAISON_CLASS); | |||||
| liaison = (XSLTLiaison) clazz.newInstance(); | liaison = (XSLTLiaison) clazz.newInstance(); | ||||
| } else { | } else { | ||||
| liaison = (XSLTLiaison) loadClass(proc).newInstance(); | liaison = (XSLTLiaison) loadClass(proc).newInstance(); | ||||
| @@ -631,17 +630,64 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
| } | } | ||||
| return expression; | 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 { | public void init() throws BuildException { | ||||
| super.init(); | super.init(); | ||||
| xmlCatalog.setProject(project); | xmlCatalog.setProject(project); | ||||
| } | } | ||||
| @@ -668,38 +713,37 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
| try { | try { | ||||
| log("Loading stylesheet " + stylesheet, Project.MSG_INFO); | log("Loading stylesheet " + stylesheet, Project.MSG_INFO); | ||||
| liaison.setStylesheet(stylesheet); | liaison.setStylesheet(stylesheet); | ||||
| if (outputtype != null) { | |||||
| liaison.setOutputtype(outputtype); | |||||
| } | |||||
| for (Enumeration e = params.elements(); e.hasMoreElements();) { | for (Enumeration e = params.elements(); e.hasMoreElements();) { | ||||
| Param p = (Param) e.nextElement(); | Param p = (Param) e.nextElement(); | ||||
| liaison.addParam(p.getName(), p.getExpression()); | liaison.addParam(p.getName(), p.getExpression()); | ||||
| } | } | ||||
| if (liaison instanceof TraXLiaison) { | |||||
| configureTraXLiaison((TraXLiaison)liaison); | |||||
| } | |||||
| } catch (Exception ex) { | } 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); | 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()); | |||||
| } | } | ||||
| } | } | ||||
| @@ -72,8 +72,9 @@ import java.io.IOException; | |||||
| import java.util.Vector; | 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. | * generating the property names from the file's element and attribute names. | ||||
| * | |||||
| * Example: | * Example: | ||||
| * <pre> | * <pre> | ||||
| * <root-tag myattr="true"> | * <root-tag myattr="true"> | ||||
| @@ -84,7 +84,7 @@ import org.apache.tools.zip.ZipOutputStream; | |||||
| import org.apache.tools.zip.ZipEntry; | 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 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> | * @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(); | protected Hashtable addedDirs = new Hashtable(); | ||||
| private Vector addedFiles = new Vector(); | private Vector addedFiles = new Vector(); | ||||
| /** | |||||
| /** | |||||
| * true when we are adding new files into the Zip file, as opposed | * 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; | private boolean addingNewFiles = false; | ||||
| @@ -144,7 +144,7 @@ public class Zip extends MatchingTask { | |||||
| * create the file. | * create the file. | ||||
| * @since Ant 1.5 | * @since Ant 1.5 | ||||
| * @deprecated Use setDestFile(File) instead | * @deprecated Use setDestFile(File) instead | ||||
| * @ant.attribute ignored="true" | |||||
| * @ant.attribute ignore="true" | |||||
| */ | */ | ||||
| public void setFile(File file) { | public void setFile(File file) { | ||||
| setDestFile(file); | setDestFile(file); | ||||
| @@ -276,12 +276,12 @@ public class Zip extends MatchingTask { | |||||
| if (baseDir == null && filesets.size() == 0 | if (baseDir == null && filesets.size() == 0 | ||||
| && groupfilesets.size() == 0 && "zip".equals(archiveType)) { | && groupfilesets.size() == 0 && "zip".equals(archiveType)) { | ||||
| throw new BuildException("basedir attribute must be set, " | throw new BuildException("basedir attribute must be set, " | ||||
| + "or at least " | |||||
| + "or at least " | |||||
| + "one fileset must be given!"); | + "one fileset must be given!"); | ||||
| } | } | ||||
| if (zipFile == null) { | if (zipFile == null) { | ||||
| throw new BuildException("You must specify the " | |||||
| throw new BuildException("You must specify the " | |||||
| + archiveType + " file to create!"); | + archiveType + " file to create!"); | ||||
| } | } | ||||
| @@ -292,22 +292,6 @@ public class Zip extends MatchingTask { | |||||
| addingNewFiles = true; | addingNewFiles = true; | ||||
| doUpdate = doUpdate && zipFile.exists(); | 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 | // Add the files found in groupfileset to fileset | ||||
| for (int i = 0; i < groupfilesets.size(); i++) { | for (int i = 0; i < groupfilesets.size(); i++) { | ||||
| @@ -319,7 +303,7 @@ public class Zip extends MatchingTask { | |||||
| File basedir = scanner.getBasedir(); | File basedir = scanner.getBasedir(); | ||||
| for (int j = 0; j < files.length; j++) { | 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); | Project.MSG_VERBOSE); | ||||
| ZipFileSet zf = new ZipFileSet(); | ZipFileSet zf = new ZipFileSet(); | ||||
| zf.setSrc(new File(basedir, files[j])); | zf.setSrc(new File(basedir, files[j])); | ||||
| @@ -348,9 +332,26 @@ public class Zip extends MatchingTask { | |||||
| if (isUpToDate(scanners, zipFile)) { | if (isUpToDate(scanners, zipFile)) { | ||||
| return; | 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 "; | String action = doUpdate ? "Updating " : "Building "; | ||||
| log(action + archiveType + ": " + zipFile.getAbsolutePath()); | log(action + archiveType + ": " + zipFile.getAbsolutePath()); | ||||
| ZipOutputStream zOut = | ZipOutputStream zOut = | ||||
| @@ -416,16 +417,16 @@ public class Zip extends MatchingTask { | |||||
| } | } | ||||
| } | } | ||||
| } catch (IOException ioe) { | } catch (IOException ioe) { | ||||
| String msg = "Problem creating " + archiveType + ": " | |||||
| String msg = "Problem creating " + archiveType + ": " | |||||
| + ioe.getMessage(); | + 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 " | msg += " (and the archive is probably corrupt but I could not " | ||||
| + "delete it)"; | + "delete it)"; | ||||
| } | } | ||||
| if (doUpdate) { | |||||
| if (doUpdate && renamedFile != null) { | |||||
| if (!renamedFile.renameTo(zipFile)) { | if (!renamedFile.renameTo(zipFile)) { | ||||
| msg += " (and I couldn't rename the temporary file " + | msg += " (and I couldn't rename the temporary file " + | ||||
| renamedFile.getName() + " back)"; | renamedFile.getName() + " back)"; | ||||
| @@ -453,7 +454,7 @@ public class Zip extends MatchingTask { | |||||
| * <p>Ensure parent directories have been added as well. | * <p>Ensure parent directories have been added as well. | ||||
| */ | */ | ||||
| protected void addFiles(FileScanner scanner, ZipOutputStream zOut, | protected void addFiles(FileScanner scanner, ZipOutputStream zOut, | ||||
| String prefix, String fullpath) | |||||
| String prefix, String fullpath) | |||||
| throws IOException { | throws IOException { | ||||
| if (prefix.length() > 0 && fullpath.length() > 0) { | if (prefix.length() > 0 && fullpath.length() > 0) { | ||||
| @@ -504,7 +505,7 @@ public class Zip extends MatchingTask { | |||||
| } | } | ||||
| protected void addZipEntries(ZipFileSet fs, DirectoryScanner ds, | protected void addZipEntries(ZipFileSet fs, DirectoryScanner ds, | ||||
| ZipOutputStream zOut, String prefix, | |||||
| ZipOutputStream zOut, String prefix, | |||||
| String fullpath) | String fullpath) | ||||
| throws IOException { | throws IOException { | ||||
| log("adding zip entries: " + fullpath, Project.MSG_VERBOSE); | log("adding zip entries: " + fullpath, Project.MSG_VERBOSE); | ||||
| @@ -533,7 +534,7 @@ public class Zip extends MatchingTask { | |||||
| } else { | } else { | ||||
| addParentDirs(null, vPath, zOut, prefix); | addParentDirs(null, vPath, zOut, prefix); | ||||
| if (!entry.isDirectory()) { | if (!entry.isDirectory()) { | ||||
| zipFile(in, zOut, prefix + vPath, entry.getTime(), | |||||
| zipFile(in, zOut, prefix + vPath, entry.getTime(), | |||||
| zipSrc); | zipSrc); | ||||
| } | } | ||||
| } | } | ||||
| @@ -569,7 +570,7 @@ public class Zip extends MatchingTask { | |||||
| // In this case using java.util.zip will not work | // In this case using java.util.zip will not work | ||||
| // because it does not permit a zero-entry archive. | // because it does not permit a zero-entry archive. | ||||
| // Must create it manually. | // Must create it manually. | ||||
| log("Note: creating empty " + archiveType + " archive " + zipFile, | |||||
| log("Note: creating empty " + archiveType + " archive " + zipFile, | |||||
| Project.MSG_INFO); | Project.MSG_INFO); | ||||
| OutputStream os = null; | OutputStream os = null; | ||||
| try { | try { | ||||
| @@ -584,7 +585,7 @@ public class Zip extends MatchingTask { | |||||
| os.write(empty); | os.write(empty); | ||||
| } catch (IOException ioe) { | } catch (IOException ioe) { | ||||
| throw new BuildException("Could not create empty ZIP archive " | throw new BuildException("Could not create empty ZIP archive " | ||||
| + "(" + ioe.getMessage() + ")", ioe, | |||||
| + "(" + ioe.getMessage() + ")", ioe, | |||||
| location); | location); | ||||
| } finally { | } finally { | ||||
| if (os != null) { | if (os != null) { | ||||
| @@ -607,7 +608,7 @@ public class Zip extends MatchingTask { | |||||
| * already); false if archive creation should proceed | * already); false if archive creation should proceed | ||||
| * @exception BuildException if it likes | * @exception BuildException if it likes | ||||
| */ | */ | ||||
| protected boolean isUpToDate(FileScanner[] scanners, File zipFile) | |||||
| protected boolean isUpToDate(FileScanner[] scanners, File zipFile) | |||||
| throws BuildException { | throws BuildException { | ||||
| String[][] fileNames = grabFileNames(scanners); | String[][] fileNames = grabFileNames(scanners); | ||||
| File[] files = grabFiles(scanners, fileNames); | File[] files = grabFiles(scanners, fileNames); | ||||
| @@ -627,7 +628,7 @@ public class Zip extends MatchingTask { | |||||
| } else { | } else { | ||||
| for (int i = 0; i < files.length; ++i) { | for (int i = 0; i < files.length; ++i) { | ||||
| if (files[i].equals(zipFile)) { | if (files[i].equals(zipFile)) { | ||||
| throw new BuildException("A zip file cannot include " | |||||
| throw new BuildException("A zip file cannot include " | |||||
| + "itself", location); | + "itself", location); | ||||
| } | } | ||||
| } | } | ||||
| @@ -716,12 +717,12 @@ public class Zip extends MatchingTask { | |||||
| log(vPath + " already added, skipping", Project.MSG_INFO); | log(vPath + " already added, skipping", Project.MSG_INFO); | ||||
| return; | return; | ||||
| } else if (duplicate.equals("fail")) { | } else if (duplicate.equals("fail")) { | ||||
| throw new BuildException("Duplicate file " + vPath | |||||
| throw new BuildException("Duplicate file " + vPath | |||||
| + " was found and the duplicate " | + " was found and the duplicate " | ||||
| + "attribute is 'fail'."); | + "attribute is 'fail'."); | ||||
| } else { | } else { | ||||
| // duplicate equal to add, so we continue | // duplicate equal to add, so we continue | ||||
| log("duplicate file " + vPath | |||||
| log("duplicate file " + vPath | |||||
| + " found, adding.", Project.MSG_VERBOSE); | + " found, adding.", Project.MSG_VERBOSE); | ||||
| } | } | ||||
| } else { | } else { | ||||
| @@ -791,7 +792,7 @@ public class Zip extends MatchingTask { | |||||
| protected void zipFile(File file, ZipOutputStream zOut, String vPath) | protected void zipFile(File file, ZipOutputStream zOut, String vPath) | ||||
| throws IOException { | throws IOException { | ||||
| if (file.equals(zipFile)) { | if (file.equals(zipFile)) { | ||||
| throw new BuildException("A zip file cannot include itself", | |||||
| throw new BuildException("A zip file cannot include itself", | |||||
| location); | location); | ||||
| } | } | ||||
| @@ -74,8 +74,8 @@ import org.apache.tools.ant.types.Commandline; | |||||
| import org.apache.tools.ant.types.FileSet; | 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. | * It produces an XML output representing the list of changes. | ||||
| * <PRE> | * <PRE> | ||||
| * <FONT color=#0000ff><!-- Root element --></FONT> | * <FONT color=#0000ff><!-- Root element --></FONT> | ||||
| @@ -217,7 +217,7 @@ public class ChangeLogTask extends Task { | |||||
| /** | /** | ||||
| * Execute task | * Execute task | ||||
| * | * | ||||
| * @exception BuildException if something goes wrong executing the | |||||
| * @exception BuildException if something goes wrong executing the | |||||
| * cvs command | * cvs command | ||||
| */ | */ | ||||
| public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
| @@ -70,8 +70,8 @@ import java.io.UnsupportedEncodingException; | |||||
| import java.util.Vector; | 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. | * It produces an XML output representing the list of changes. | ||||
| * <PRE> | * <PRE> | ||||
| * <!-- Root element --> | * <!-- Root element --> | ||||
| @@ -61,7 +61,7 @@ checksum=org.apache.tools.ant.taskdefs.Checksum | |||||
| waitfor=org.apache.tools.ant.taskdefs.WaitFor | waitfor=org.apache.tools.ant.taskdefs.WaitFor | ||||
| input=org.apache.tools.ant.taskdefs.Input | input=org.apache.tools.ant.taskdefs.Input | ||||
| loadfile=org.apache.tools.ant.taskdefs.LoadFile | 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 | loadproperties=org.apache.tools.ant.taskdefs.LoadProperties | ||||
| basename=org.apache.tools.ant.taskdefs.Basename | basename=org.apache.tools.ant.taskdefs.Basename | ||||
| dirname=org.apache.tools.ant.taskdefs.Dirname | 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 | test=org.apache.tools.ant.taskdefs.optional.Test | ||||
| pvcs=org.apache.tools.ant.taskdefs.optional.pvcs.Pvcs | pvcs=org.apache.tools.ant.taskdefs.optional.pvcs.Pvcs | ||||
| p4change=org.apache.tools.ant.taskdefs.optional.perforce.P4Change | 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 | p4label=org.apache.tools.ant.taskdefs.optional.perforce.P4Label | ||||
| p4have=org.apache.tools.ant.taskdefs.optional.perforce.P4Have | p4have=org.apache.tools.ant.taskdefs.optional.perforce.P4Have | ||||
| p4sync=org.apache.tools.ant.taskdefs.optional.perforce.P4Sync | p4sync=org.apache.tools.ant.taskdefs.optional.perforce.P4Sync | ||||
| p4edit=org.apache.tools.ant.taskdefs.optional.perforce.P4Edit | p4edit=org.apache.tools.ant.taskdefs.optional.perforce.P4Edit | ||||
| p4submit=org.apache.tools.ant.taskdefs.optional.perforce.P4Submit | p4submit=org.apache.tools.ant.taskdefs.optional.perforce.P4Submit | ||||
| p4counter=org.apache.tools.ant.taskdefs.optional.perforce.P4Counter | 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 | javah=org.apache.tools.ant.taskdefs.optional.Javah | ||||
| ccupdate=org.apache.tools.ant.taskdefs.optional.clearcase.CCUpdate | ccupdate=org.apache.tools.ant.taskdefs.optional.clearcase.CCUpdate | ||||
| cccheckout=org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckout | cccheckout=org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckout | ||||
| @@ -70,7 +70,7 @@ import org.apache.tools.ant.types.CommandlineJava; | |||||
| import org.apache.tools.ant.types.Path; | 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:emeade@geekfarm.org">Erik Meade</a> | ||||
| * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a> | * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a> | ||||
| @@ -121,32 +121,38 @@ public class ANTLR extends Task { | |||||
| commandline.setClassname("antlr.Tool"); | commandline.setClassname("antlr.Tool"); | ||||
| } | } | ||||
| /** | |||||
| * The grammar file to process. | |||||
| */ | |||||
| public void setTarget(File target) { | public void setTarget(File target) { | ||||
| log("Setting target to: " + target.toString(), Project.MSG_VERBOSE); | log("Setting target to: " + target.toString(), Project.MSG_VERBOSE); | ||||
| this.target = target; | this.target = target; | ||||
| } | } | ||||
| /** | |||||
| * The directory to write the generated files to. | |||||
| */ | |||||
| public void setOutputdirectory(File outputDirectory) { | public void setOutputdirectory(File outputDirectory) { | ||||
| log("Setting output directory to: " + outputDirectory.toString(), Project.MSG_VERBOSE); | log("Setting output directory to: " + outputDirectory.toString(), Project.MSG_VERBOSE); | ||||
| this.outputDirectory = outputDirectory; | this.outputDirectory = outputDirectory; | ||||
| } | } | ||||
| /** | /** | ||||
| * Sets an optional super grammar file | |||||
| * Sets an optional super grammar file. | |||||
| */ | */ | ||||
| public void setGlib(String superGrammar) { | public void setGlib(String superGrammar) { | ||||
| this.superGrammar = superGrammar; | this.superGrammar = superGrammar; | ||||
| } | } | ||||
| /** | /** | ||||
| * Sets a flag to enable ParseView debugging | * Sets a flag to enable ParseView debugging | ||||
| */ | */ | ||||
| public void setDebug(boolean enable) { | public void setDebug(boolean enable) { | ||||
| debug = enable; | debug = enable; | ||||
| } | } | ||||
| /** | /** | ||||
| * Sets a flag to emit html | |||||
| * If true, emit html | |||||
| */ | */ | ||||
| public void setHtml(boolean enable) { | public void setHtml(boolean enable) { | ||||
| html = enable; | html = enable; | ||||
| @@ -158,43 +164,46 @@ public class ANTLR extends Task { | |||||
| public void setDiagnostic(boolean enable) { | public void setDiagnostic(boolean enable) { | ||||
| diagnostic = enable; | diagnostic = enable; | ||||
| } | } | ||||
| /** | /** | ||||
| * Sets a flag to enable all tracing | |||||
| * If true, enables all tracing. | |||||
| */ | */ | ||||
| public void setTrace(boolean enable) { | public void setTrace(boolean enable) { | ||||
| trace = enable; | trace = enable; | ||||
| } | } | ||||
| /** | /** | ||||
| * Sets a flag to enable parser tracing | |||||
| * If true, enables parser tracing. | |||||
| */ | */ | ||||
| public void setTraceParser(boolean enable) { | public void setTraceParser(boolean enable) { | ||||
| traceParser = enable; | traceParser = enable; | ||||
| } | } | ||||
| /** | /** | ||||
| * Sets a flag to allow the user to enable lexer tracing | |||||
| * If true, enables lexer tracing. | |||||
| */ | */ | ||||
| public void setTraceLexer(boolean enable) { | public void setTraceLexer(boolean enable) { | ||||
| traceLexer = enable; | traceLexer = enable; | ||||
| } | } | ||||
| /** | /** | ||||
| * Sets a flag to allow the user to enable tree walker tracing | * Sets a flag to allow the user to enable tree walker tracing | ||||
| */ | */ | ||||
| public void setTraceTreeWalker(boolean enable) { | public void setTraceTreeWalker(boolean enable) { | ||||
| traceTreeWalker = enable; | traceTreeWalker = enable; | ||||
| } | } | ||||
| // we are forced to fork ANTLR since there is a call | // we are forced to fork ANTLR since there is a call | ||||
| // to System.exit() and there is nothing we can do | // to System.exit() and there is nothing we can do | ||||
| // right now to avoid this. :-( (SBa) | // right now to avoid this. :-( (SBa) | ||||
| // I'm not removing this method to keep backward compatibility | // I'm not removing this method to keep backward compatibility | ||||
| /** | |||||
| * @ant.attribute ignore="true" | |||||
| */ | |||||
| public void setFork(boolean s) { | public void setFork(boolean s) { | ||||
| //this.fork = s; | //this.fork = s; | ||||
| } | } | ||||
| /** | /** | ||||
| * The working directory of the process | * The working directory of the process | ||||
| */ | */ | ||||
| @@ -203,15 +212,15 @@ public class ANTLR extends Task { | |||||
| } | } | ||||
| /** | /** | ||||
| * <code><classpath></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() { | public Path createClasspath() { | ||||
| return commandline.createClasspath(project).createPath(); | 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. | * @return create a new JVM argument so that any argument can be passed to the JVM. | ||||
| * @see #setFork(boolean) | * @see #setFork(boolean) | ||||
| */ | */ | ||||
| @@ -266,7 +275,7 @@ public class ANTLR extends Task { | |||||
| if (target.lastModified() > getGeneratedFile().lastModified()) { | if (target.lastModified() > getGeneratedFile().lastModified()) { | ||||
| populateAttributes(); | populateAttributes(); | ||||
| commandline.createArgument().setValue(target.toString()); | commandline.createArgument().setValue(target.toString()); | ||||
| log(commandline.describeCommand(), Project.MSG_VERBOSE); | log(commandline.describeCommand(), Project.MSG_VERBOSE); | ||||
| int err = run(commandline.getCommandline()); | int err = run(commandline.getCommandline()); | ||||
| if (err == 1) { | if (err == 1) { | ||||
| @@ -312,12 +321,12 @@ public class ANTLR extends Task { | |||||
| if (target == null || !target.isFile()) { | if (target == null || !target.isFile()) { | ||||
| throw new BuildException("Invalid target: " + target); | throw new BuildException("Invalid target: " + target); | ||||
| } | } | ||||
| // validate the superGrammar file | // validate the superGrammar file | ||||
| if (superGrammar != null && !new File(superGrammar).isFile()) { | if (superGrammar != null && !new File(superGrammar).isFile()) { | ||||
| throw new BuildException("Invalid super grammar file: " + superGrammar); | throw new BuildException("Invalid super grammar file: " + superGrammar); | ||||
| } | } | ||||
| // if no output directory is specified, used the target's directory | // if no output directory is specified, used the target's directory | ||||
| if (outputDirectory == null) { | if (outputDirectory == null) { | ||||
| String fileName = target.toString(); | String fileName = target.toString(); | ||||
| @@ -66,6 +66,8 @@ import org.w3c.dom.Element; | |||||
| import java.util.Enumeration; | import java.util.Enumeration; | ||||
| import java.util.Hashtable; | import java.util.Hashtable; | ||||
| import java.util.Enumeration; | |||||
| import java.util.Hashtable; | |||||
| import java.util.Properties; | import java.util.Properties; | ||||
| import java.io.ByteArrayOutputStream; | import java.io.ByteArrayOutputStream; | ||||
| @@ -77,12 +77,12 @@ import org.apache.tools.ant.types.Path; | |||||
| import org.apache.tools.ant.types.Reference; | 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/> | * <br/> | ||||
| * The task can generate a properties file for <a href="http://hjem.sol.no/hellesoy/icontrol.html">iControl</a>, | * 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 | * 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. | * 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/> | * <p/> | ||||
| * Thanks to Rainer Schmitz for enhancements and comments. | * Thanks to Rainer Schmitz for enhancements and comments. | ||||
| * | * | ||||
| @@ -226,12 +226,6 @@ public class IContract extends MatchingTask { | |||||
| private static final String ICONTROL_PROPERTIES_HEADER = | private static final String ICONTROL_PROPERTIES_HEADER = | ||||
| " You might want to set classRoot to point to your normal compilation class root directory."; | " 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 */ | /** compiler to use for instrumenation */ | ||||
| private String icCompiler = "javac"; | private String icCompiler = "javac"; | ||||
| @@ -274,9 +268,6 @@ public class IContract extends MatchingTask { | |||||
| /** The -q option */ | /** The -q option */ | ||||
| private boolean quiet = false; | private boolean quiet = false; | ||||
| /** Indicates whether or not to use internal compilation */ | |||||
| private boolean internalcompilation = false; | |||||
| /** The -m option */ | /** The -m option */ | ||||
| private File controlFile = null; | private File controlFile = null; | ||||
| @@ -305,9 +296,8 @@ public class IContract extends MatchingTask { | |||||
| /** Regular compilation class root */ | /** Regular compilation class root */ | ||||
| private File classDir = null; | private File classDir = null; | ||||
| /** | /** | ||||
| * Sets the source directory | |||||
| * Sets the source directory. | |||||
| * | * | ||||
| * @param srcDir 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) { | public void setClassdir(File classDir) { | ||||
| this.classDir = 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 | * @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 | * @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 | * @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) { | public void setRepbuilddir(File repBuildDir) { | ||||
| this.repBuildDir = 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 | * @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 | * @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 | * @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 | * @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 | * @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() { | public Path createClasspath() { | ||||
| if (classpath == null) { | 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 | * @param updateIcontrol true if iControl properties file should be | ||||
| * updated | * updated | ||||
| @@ -71,8 +71,9 @@ import java.util.StringTokenizer; | |||||
| import java.util.Enumeration; | 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> | * <ul> | ||||
| * <li>classname - the fully-qualified name of a class</li> | * <li>classname - the fully-qualified name of a class</li> | ||||
| * <li>outputFile - Concatenates the resulting header or source files for all | * <li>outputFile - Concatenates the resulting header or source files for all | ||||
| @@ -118,10 +119,16 @@ public class Javah extends Task { | |||||
| //private Path extdirs; | //private Path extdirs; | ||||
| private static String lSep = System.getProperty("line.separator"); | 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) { | public void setClass(String cls) { | ||||
| this.cls = cls; | this.cls = cls; | ||||
| } | } | ||||
| /** | |||||
| * Adds class to process. | |||||
| */ | |||||
| public ClassArgument createClass() { | public ClassArgument createClass() { | ||||
| ClassArgument ga = new ClassArgument(); | ClassArgument ga = new ClassArgument(); | ||||
| classes.addElement(ga); | classes.addElement(ga); | ||||
| @@ -152,6 +159,9 @@ public class Javah extends Task { | |||||
| this.destDir = destDir; | this.destDir = destDir; | ||||
| } | } | ||||
| /** | |||||
| * the classpath to use. | |||||
| */ | |||||
| public void setClasspath(Path src) { | public void setClasspath(Path src) { | ||||
| if (classpath == null) { | if (classpath == null) { | ||||
| classpath = src; | classpath = src; | ||||
| @@ -159,6 +169,10 @@ public class Javah extends Task { | |||||
| classpath.append(src); | classpath.append(src); | ||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Path to use for classpath. | |||||
| */ | |||||
| public Path createClasspath() { | public Path createClasspath() { | ||||
| if (classpath == null) { | if (classpath == null) { | ||||
| classpath = new Path(project); | 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) { | public void setClasspathRef(Reference r) { | ||||
| createClasspath().setRefid(r); | createClasspath().setRefid(r); | ||||
| } | } | ||||
| /** | |||||
| * location of bootstrap class files. | |||||
| */ | |||||
| public void setBootclasspath(Path src) { | public void setBootclasspath(Path src) { | ||||
| if (bootclasspath == null) { | if (bootclasspath == null) { | ||||
| bootclasspath = src; | bootclasspath = src; | ||||
| @@ -180,6 +198,10 @@ public class Javah extends Task { | |||||
| bootclasspath.append(src); | bootclasspath.append(src); | ||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Adds path to bootstrap class files. | |||||
| */ | |||||
| public Path createBootclasspath() { | public Path createBootclasspath() { | ||||
| if (bootclasspath == null) { | if (bootclasspath == null) { | ||||
| bootclasspath = new Path(project); | 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) { | public void setBootClasspathRef(Reference r) { | ||||
| createBootclasspath().setRefid(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) { | public void setOutputFile(File outputFile) { | ||||
| this.outputFile = 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) { | public void setForce(boolean force) { | ||||
| this.force = 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) { | public void setOld(boolean old) { | ||||
| this.old = 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) { | public void setStubs(boolean stubs) { | ||||
| this.stubs = 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) { | public void setVerbose(boolean verbose) { | ||||
| this.verbose = verbose; | this.verbose = verbose; | ||||
| @@ -67,7 +67,7 @@ import org.apache.tools.ant.util.SourceFileScanner; | |||||
| import java.io.File; | 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="asudell@acm.org">Drew Sudell</a> | ||||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
| @@ -73,7 +73,8 @@ import org.apache.tools.ant.taskdefs.MatchingTask; | |||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | 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: | * arguments: | ||||
| * <ul> | * <ul> | ||||
| * <li>binary</li> | * <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) { | public void setSuppressDeprecation(boolean suppressDeprecation) { | ||||
| this.suppressDeprecation = suppressDeprecation; | this.suppressDeprecation = suppressDeprecation; | ||||
| @@ -78,10 +78,9 @@ import java.text.ParseException; | |||||
| import java.text.DecimalFormat; | 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: | *The following is an example of its usage: | ||||
| * <ul><target name="setState"><br> | * <ul><target name="setState"><br> | ||||
| * <ul><property<br> | * <ul><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) { | public void setFile(File file) { | ||||
| propertyfile = file; | propertyfile = file; | ||||
| } | } | ||||
| /** | |||||
| * optional header comment for the file | |||||
| */ | |||||
| public void setComment(String hdr) { | public void setComment(String hdr) { | ||||
| comment = hdr; | comment = hdr; | ||||
| } | } | ||||
| @@ -280,8 +285,9 @@ public class PropertyFile extends Task { | |||||
| } | } | ||||
| } | } | ||||
| /* | |||||
| /** | |||||
| * Returns whether the given parameter has been defined. | * Returns whether the given parameter has been defined. | ||||
| * @todo IDEA is saying this method is never used - remove? | |||||
| */ | */ | ||||
| private boolean checkParam(String param) { | private boolean checkParam(String param) { | ||||
| return !((param == null) || (param.equals("null"))); | return !((param == null) || (param.equals("null"))); | ||||
| @@ -308,27 +314,69 @@ public class PropertyFile extends Task { | |||||
| private String pattern = null; | private String pattern = null; | ||||
| private int field = Calendar.DATE; | private int field = Calendar.DATE; | ||||
| /** | |||||
| * Name of the property name/value pair | |||||
| */ | |||||
| public void setKey(String value) { | public void setKey(String value) { | ||||
| this.key = value; | this.key = value; | ||||
| } | } | ||||
| /** | |||||
| * Value to set (=), to add (+) or subtract (-) | |||||
| */ | |||||
| public void setValue(String value) { | public void setValue(String value) { | ||||
| this.value = value; | this.value = value; | ||||
| } | } | ||||
| /** | |||||
| * operation to apply. | |||||
| * "+" or "=" | |||||
| *(default) for all datatypes; "-" for date and int only)\. | |||||
| */ | |||||
| public void setOperation(Operation value) { | public void setOperation(Operation value) { | ||||
| this.operation = Operation.toOperation(value.getValue()); | this.operation = Operation.toOperation(value.getValue()); | ||||
| } | } | ||||
| /** | |||||
| * Regard the value as : int, date or string (default) | |||||
| */ | |||||
| public void setType(Type value) { | public void setType(Type value) { | ||||
| this.type = Type.toType(value.getValue()); | 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: "now" | |||||
| */ | |||||
| public void setDefault(String value) { | public void setDefault(String value) { | ||||
| this.defaultValue = value; | this.defaultValue = value; | ||||
| } | } | ||||
| /** | |||||
| * For int and date type only. If present, Values will | |||||
| * be parsed and formatted accordingly. | |||||
| */ | |||||
| public void setPattern(String value) { | public void setPattern(String value) { | ||||
| this.pattern = 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) { | public void setUnit(PropertyFile.Unit unit) { | ||||
| field = unit.getCalendarField(); | field = unit.getCalendarField(); | ||||
| @@ -598,8 +646,8 @@ public class PropertyFile extends Task { | |||||
| /** | /** | ||||
| * Borrowed from Tstamp | * 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 { | public static class Unit extends EnumeratedAttribute { | ||||
| @@ -97,12 +97,17 @@ public class RenameExtensions extends MatchingTask { | |||||
| globType.setValue("glob"); | globType.setValue("glob"); | ||||
| } | } | ||||
| /** store fromExtension **/ | |||||
| /** | |||||
| * The string that files must end in to be renamed | |||||
| **/ | |||||
| public void setFromExtension(String from) { | public void setFromExtension(String from) { | ||||
| fromExtension = from; | fromExtension = from; | ||||
| } | } | ||||
| /** store toExtension **/ | |||||
| /** | |||||
| * The string that renamed files will end with on | |||||
| * completion | |||||
| */ | |||||
| public void setToExtension(String to) { | public void setToExtension(String to) { | ||||
| toExtension = to; | toExtension = to; | ||||
| } | } | ||||