bodewig 2004/11/16 00:12:37 Modified: docs/manual running.html tutorial-tasks-filesets-properties.html tutorial-writing-tasks.html docs/manual/CoreTasks changelog.html chmod.html docs/manual/CoreTypes filterchain.html selectors-program.html selectors.html docs/manual/OptionalTasks replaceregexp.html Log: > -> > Submitted by: Larry Shatzer Revision Changes Path 1.28 +1 -1 ant/docs/manual/running.html Index: running.html =================================================================== RCS file: /home/cvs/ant/docs/manual/running.html,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- running.html 31 Aug 2004 22:32:53 -0000 1.27 +++ running.html 16 Nov 2004 08:12:30 -0000 1.28 @@ -217,7 +217,7 @@ <p>So here the result of a search through the codebase. Because system properties are available via Project instance, I searched for them with a <pre> - grep -r -n "getPropert" * > ..\grep.txt + grep -r -n "getPropert" * > ..\grep.txt </pre> command. After that I filtered out the often-used but not-so-important values (most of them read-only values): <i>path.separator, ant.home, basedir, user.dir, os.name, ant.file, 1.5 +178 -178 ant/docs/manual/tutorial-tasks-filesets-properties.html Index: tutorial-tasks-filesets-properties.html =================================================================== RCS file: /home/cvs/ant/docs/manual/tutorial-tasks-filesets-properties.html,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- tutorial-tasks-filesets-properties.html 9 Feb 2004 21:50:05 -0000 1.4 +++ tutorial-tasks-filesets-properties.html 16 Nov 2004 08:12:31 -0000 1.5 @@ -41,16 +41,16 @@ <p>We can use the buildfile from the other tutorial and modify it a little bit. That´s the advantage of using properties - we can reuse nearly the whole script. :-)</p> <pre class="code"> -<?xml version="1.0" encoding="ISO-8859-1"?> -<project name="<b>FindTask</b>" basedir="." default="test"> +<?xml version="1.0" encoding="ISO-8859-1"?> +<project name="<b>FindTask</b>" basedir="." default="test"> ... - <target name="use.init" description="Taskdef´ the <b>Find</b>-Task" depends="jar"> - <taskdef name="<b>find</b>" classname="<b>Find</b>" classpath="${ant.project.name}.jar"/> - </target> + <target name="use.init" description="Taskdef´ the <b>Find</b>-Task" depends="jar"> + <taskdef name="<b>find</b>" classname="<b>Find</b>" classpath="${ant.project.name}.jar"/> + </target> <b><!-- the other use.* targets are deleted --></b> ... -</project> +</project> </pre> <p>The buildfile is in the archive <a href="tutorial-tasks-filesets-properties.zip"> @@ -63,13 +63,13 @@ <p>Our first step is to set a property to a value and print the value of that property. So our scenario would be <pre class="code"> - <find property="test" value="test-value"/> - <find print="test"/> + <find property="test" value="test-value"/> + <find print="test"/> </pre> ok, can be rewritten with the core tasks <pre class="code"> - <property name="test" value="test-value"/> - <echo message="${test}"/> + <property name="test" value="test-value"/> + <echo message="${test}"/> </pre> but I have to start on known ground :-)</p> <p>So what to do? Handling three attributes (property, value, print) and an execute method. @@ -117,7 +117,7 @@ <p><i>(by the way: a short word to ants "namespaces" (don´t be confused with xml namespaces which will be also introduces in the future (1.6 or 1.7): -an <antcall> creates a new space for property names. All properties from the caller +an <antcall> creates a new space for property names. All properties from the caller are passed to the callee, but the callee can set its own properties without notice by the caller.)</i></p> @@ -158,9 +158,9 @@ path is simply a fileset (or more precise: a collection of filesets). So our usage would be <pre class="code"> - <find file="ant.jar" location="location.ant-jar"> - <fileset dir="${ant.home}" includes="**/*.jar"/> - </find> + <find file="ant.jar" location="location.ant-jar"> + <fileset dir="${ant.home}" includes="**/*.jar"/> + </find> </pre> </p> @@ -315,30 +315,30 @@ environment we have to set that value for our own. And we use the <junit> task in fork-mode. Therefore we have do modify our buildfile: <pre class="code"> - <target name="junit" description="Runs the unit tests" depends="jar"> - <delete dir="${junit.out.dir.xml}" /> - <mkdir dir="${junit.out.dir.xml}" /> - <junit printsummary="yes" haltonfailure="no"> - <classpath refid="classpath.test"/> - <b><sysproperty key="ant.home" value="${ant.home}"/></b> - <formatter type="xml"/> - <batchtest fork="yes" todir="${junit.out.dir.xml}"> - <fileset dir="${src.dir}" includes="**/*Test.java"/> - </batchtest> - </junit> - </target> + <target name="junit" description="Runs the unit tests" depends="jar"> + <delete dir="${junit.out.dir.xml}"/> + <mkdir dir="${junit.out.dir.xml}"/> + <junit printsummary="yes" haltonfailure="no"> + <classpath refid="classpath.test"/> + <b><sysproperty key="ant.home" value="${ant.home}"/></b> + <formatter type="xml"/> + <batchtest fork="yes" todir="${junit.out.dir.xml}"> + <fileset dir="${src.dir}" includes="**/*Test.java"/> + </batchtest> + </junit> + </target> </pre> <a name="path"/> <h2>Using nested paths</h2> <p>A task providing support for filesets is a very comfortable one. But there is another -possibility of bundling files: the <path>. Fileset are easy if the files are all under +possibility of bundling files: the <path>. Fileset are easy if the files are all under a common base directory. But if this is not the case you have a problem. Another disadvantage is its speed: if you have only a few files in a huge directory structure, why not use a -<filelist> instead? <path>s combines these datatypes in that way that a path contains +<filelist> instead? <path>s combines these datatypes in that way that a path contains other paths, filesets, dirsets and filelists. This is why <a href="http://ant-contrib.sourceforge.net/"> -Ant-Contribs [4]</a> <foreach> task is modified to support paths instead of filesets. So we want that, +Ant-Contribs [4]</a> <foreach> task is modified to support paths instead of filesets. So we want that, too.</p> <p>Changing from fileset to path support is very easy:</p> @@ -354,15 +354,15 @@ paths.add(path); } <i><b>and build file from:</b></i> - <find file="ant.jar" location="location.ant-jar"> - <fileset dir="${ant.home}" includes="**/*.jar"/> - </find> + <find file="ant.jar" location="location.ant-jar"> + <fileset dir="${ant.home}" includes="**/*.jar"/> + </find> <i><b>to:</b></i> - <find file="ant.jar" location="location.ant-jar"> - <b><path></b> *3 - <fileset dir="${ant.home}" includes="**/*.jar"/> - </path> - </find> + <find file="ant.jar" location="location.ant-jar"> + <b><path></b> *3 + <fileset dir="${ant.home}" includes="**/*.jar"/> + </path> + </find> </pre> <p>On <b>*1</b> we rename only the vector. It´s just for better reading the source. On <b>*2</b> we have to provide the right method: an add<i>Name</i>(<i>Type</i> t). Therefore replace the @@ -414,13 +414,13 @@ <p>In this section we will extend that task to support returning a list of all files. Lists as property values are not supported by Ant natively. So we have to see how other -tasks use lists. The most famous task using lists is Ant-Contribs <foreach>. All list +tasks use lists. The most famous task using lists is Ant-Contribs <foreach>. All list elements are concatenated and separated with a customizable separator (default ',').</p> <p>So we do the following:</p> <pre class="code"> - <find ... <b>delimiter=""</b>/> ... </find> + <find ... <b>delimiter=""</b>/> ... </find> </pre> <p>If the delimiter is set we will return all found files as list with that delimiter.</p> @@ -436,35 +436,35 @@ <p>So we add as testcase:</p> <pre class="code"> <b><i>in the buildfile:</i></b> - <target name="test.init"> - <mkdir dir="test1/dir11/dir111"/> *1 - <mkdir dir="test1/dir11/dir112"/> + <target name="test.init"> + <mkdir dir="test1/dir11/dir111"/> *1 + <mkdir dir="test1/dir11/dir112"/> ... - <touch file="test1/dir11/dir111/test"/> - <touch file="test1/dir11/dir111/not"/> + <touch file="test1/dir11/dir111/test"/> + <touch file="test1/dir11/dir111/not"/> ... - <touch file="test1/dir13/dir131/not2"/> - <touch file="test1/dir13/dir132/test"/> - <touch file="test1/dir13/dir132/not"/> - <touch file="test1/dir13/dir132/not2"/> - <mkdir dir="test2"/> - <copy todir="test2"> *2 - <fileset dir="test1"/> - </copy> - </target> - - <target name="testMultipleFiles" depends="use.init,<b>test.init</b>"> *3 - <find file="test" location="location.test" <b>delimiter=";"</b>> - <path> - <fileset dir="test1"/> - <fileset dir="test2"/> - </path> - </find> - <delete> *4 - <fileset dir="test1"/> - <fileset dir="test2"/> - </delete> - </target> + <touch file="test1/dir13/dir131/not2"/> + <touch file="test1/dir13/dir132/test"/> + <touch file="test1/dir13/dir132/not"/> + <touch file="test1/dir13/dir132/not2"/> + <mkdir dir="test2"/> + <copy todir="test2"> *2 + <fileset dir="test1"/> + </copy> + </target> + + <target name="testMultipleFiles" depends="use.init,<b>test.init</b>"> *3 + <find file="test" location="location.test" <b>delimiter=";"</b>> + <path> + <fileset dir="test1"/> + <fileset dir="test2"/> + </path> + </find> + <delete> *4 + <fileset dir="test1"/> + <fileset dir="test2"/> + </delete> + </target> <b><i>in the test class:</i></b> public void testMultipleFiles() { @@ -563,123 +563,123 @@ As a template we have: <pre class="code"> -<html> +<html> -<head> -<meta http-equiv="Content-Language" content="en-us"> -<title> <b>Taskname</b> Task</title> -</head> - -<body> - -<h2><a name="<i>taskname</i>"><b>Taskname</b></a></h2> -<h3>Description</h3> -<p> <b>Describe the task.</b></p> - -<h3>Parameters</h3> -<table 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> +<head> +<meta http-equiv="Content-Language" content="en-us"> +<title> <b>Taskname</b> Task</title> +</head> + +<body> + +<h2><a name="<i>taskname</i>"><b>Taskname</b></a></h2> +<h3>Description</h3> +<p> <b>Describe the task.</b></p> + +<h3>Parameters</h3> +<table 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> <b>do this html row for each attribute (including inherited attributes)</b> - <tr> - <td valign="top">classname</td> - <td valign="top">the Java class to execute.</td> - <td align="center" valign="top">Either jar or classname</td> - </tr> + <tr> + <td valign="top">classname</td> + <td valign="top">the Java class to execute.</td> + <td align="center" valign="top">Either jar or classname</td> + </tr> -</table> +</table> -<h3>Parameters specified as nested elements</h3> +<h3>Parameters specified as nested elements</h3> <b>Describe each nested element (including inherited)</b> -<h4><b>your nested element</b></h4> -<p> <b>description</b> </p> -<p><em>since Ant 1.6</em>.</p> +<h4>your nested element</b></h4> +<p> <b>description</b> </p> +<p><em>since Ant 1.6</em>.</p> -<h3>Examples</h3> -<pre> +<h3>Examples</h3> +<pre> <b>A code sample; don´t forget to escape the < of the tags with &lt;</b> -</pre> +</pre> <b>what should that example do?</b> -</body> -</html> +</body> +</html> </pre> <p>For our task we have <a href="CoreTasks/find.html">that [6]</a>:</p> <pre class="code"> -<html> +<html> -<head> -<meta http-equiv="Content-Language" content="en-us"> -<title> Find Task</title> -</head> - -<body> - -<h2><a name="find">Find</a></h2> -<h3>Description</h3> -<p>Searchs in a given path for a file and returns the absolute to it as property. -If delimiter is set this task returns all found locations.</p> - -<h3>Parameters</h3> -<table 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">file</td> - <td valign="top">The name of the file to search.</td> - <td align="center" valign="top">yes</td> - </tr> - <tr> - <td valign="top">location</td> - <td valign="top">The name of the property where to store the location</td> - <td align="center" valign="top">yes</td> - </tr> - <tr> - <td valign="top">delimiter</td> - <td valign="top">A delimiter to use when returning the list</td> - <td align="center" valign="top">only if the list is required</td> - </tr> -</table> - -<h3>Parameters specified as nested elements</h3> - -<h4>path</h4> -<p>The path where to search the file.</p> - -<h3>Examples</h3> -<pre> - <find file="ant.jar" location="loc"> - <path> - <fileset dir="${ant.home}"/> - <path> - </find> -</pre> -Searches in Ants home directory for a file <i>ant.jar</i> and stores its location in -property <i>loc</i> (should be ANT_HOME/bin/ant.jar). - -<pre> - <find file="ant.jar" location="loc" delimiter=";"> - <path> - <fileset dir="C:/"/> - <path> - </find> - <echo>ant.jar found in: ${loc}</echo> -</pre> -Searches in Windows C: drive for all <i>ant.jar</i> and stores their locations in -property <i>loc</i> delimited with <i>';'</i>. (should need a long time :-) +<head> +<meta http-equiv="Content-Language" content="en-us"> +<title> Find Task</title> +</head> + +<body> + +<h2><a name="find">Find</a></h2> +<h3>Description</h3> +<p>Searchs in a given path for a file and returns the absolute to it as property. +If delimiter is set this task returns all found locations.</p> + +<h3>Parameters</h3> +<table 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">file</td> + <td valign="top">The name of the file to search.</td> + <td align="center" valign="top">yes</td> + </tr> + <tr> + <td valign="top">location</td> + <td valign="top">The name of the property where to store the location</td> + <td align="center" valign="top">yes</td> + </tr> + <tr> + <td valign="top">delimiter</td> + <td valign="top">A delimiter to use when returning the list</td> + <td align="center" valign="top">only if the list is required</td> + </tr> +</table> + +<h3>Parameters specified as nested elements</h3> + +<h4>path</h4> +<p>The path where to search the file.</p> + +<h3>Examples</h3> +<pre> + <find file="ant.jar" location="loc"> + <path> + <fileset dir="${ant.home}"/> + <path> + </find> +</pre> +Searches in Ants home directory for a file <i>ant.jar</i> and stores its location in +property <i>loc</i> (should be ANT_HOME/bin/ant.jar). + +<pre> + <find file="ant.jar" location="loc" delimiter=";"> + <path> + <fileset dir="C:/"/> + <path> + </find> + <echo>ant.jar found in: ${loc}</echo> +</pre> +Searches in Windows C: drive for all <i>ant.jar</i> and stores their locations in +property <i>loc</i> delimited with <i>';'</i>. (should need a long time :-) After that it prints out the result (e.g. C:/ant-1.5.4/bin/ant.jar;C:/ant-1.6/bin/ant.jar). -</body> -</html> +</body> +</html> </pre> @@ -755,9 +755,9 @@ are any tests failing on our machine. (We can ignore these failing tests on later steps; windows syntax used here- translate to xNIX if needed): <pre class="output"> -ANTHOME> build // 1 -ANTHOME> set ANT_HOME=%CD%\dist // 2 -ANTHOME> ant test -Dtest.haltonfailure=false // 3 +ANTHOME> build // 1 +ANTHOME> set ANT_HOME=%CD%\dist // 2 +ANTHOME> ant test -Dtest.haltonfailure=false // 3 </pre> First we have to build our Ant distribution (<b>//1</b>). On <b>//2</b> we set the ANT_HOME @@ -782,14 +782,14 @@ <li>in FindTest.java change the line <tt>configureProject("build.xml");</tt> to <tt>configureProject("src/etc/testcases/taskdefs/find.xml");</tt> </li> <li>move the find.html to ANTHOME/docs/manual/CoreTasks/find.html </li> -<li>add a <tt><a href="CoreTasks/find.html">Find</a><br></tt> +<li>add a <tt><a href="CoreTasks/find.html">Find</a><br></tt> in the ANTHOME/docs/manual/coretasklist.html </li> </ul> Now our modifications are done and we will retest it: <pre class="output"> -ANTHOME> build -ANTHOME> ant run-single-test // 1 +ANTHOME> build +ANTHOME> ant run-single-test // 1 -Dtestcase=org.apache.tools.ant.taskdefs.FindTest // 2 -Dtest.haltonfailure=false </pre> @@ -799,15 +799,15 @@ <p>And ... oh, all tests fail: <i>Ant could not find the task or a class this task relies upon.</i></p> -<p>Ok: in the earlier steps we told Ant to use the Find class for the <find> task (remember the -<taskdef> statement in the "use.init" target). But now we want to introduce that task as +<p>Ok: in the earlier steps we told Ant to use the Find class for the <find> task (remember the +<taskdef> statement in the "use.init" target). But now we want to introduce that task as a core task. And nobody wants to taskdef the javac, echo, ... So what to do? The answer is the src/main/.../taskdefs/default.properties. Here is the mapping between taskname and implementing class done. So we add a <tt>find=org.apache.tools.ant.taskdefs.Find</tt> as the last core task (just before the <tt># optional tasks</tt> line). Now a second try: <pre class="output"> -ANTHOME> build // 1 -ANTHOME> ant run-single-test +ANTHOME> build // 1 +ANTHOME> ant run-single-test -Dtestcase=org.apache.tools.ant.taskdefs.FindTest -Dtest.haltonfailure=false </pre> @@ -816,7 +816,7 @@ source path. So we have to rebuild that jar. But now all tests pass and we check whether our class breaks some other tests. <pre class="output"> -ANTHOME> ant test -Dtest.haltonfailure=false +ANTHOME> ant test -Dtest.haltonfailure=false </pre> Because there are a lot of tests this step requires a little bit of time. So use the <i>run-single-test</i> during development and do the <i>test</i> only at the end (maybe sometimes during development too). @@ -863,7 +863,7 @@ <p>So we will run the tests with <pre class="output"> -ANTHOME> ant -f check.xml checkstyle htmlreport +ANTHOME> ant -f check.xml checkstyle htmlreport </pre> I prefer the HTML report because there are lots of messages and we can navigate faster. Open the ANTHOME/build/reports/checkstyle/html/index.html and navigate to the Find.java. Now we @@ -900,7 +900,7 @@ <tr> <th>body</th> <td><i>more details about the path</i></td> - <td>This new task looks inside a nested <path/> for occurrences of a file and stores + <td>This new task looks inside a nested <path/> for occurrences of a file and stores all locations as a property. See the included manual for details.</td> </tr> <tr> 1.5 +151 -151 ant/docs/manual/tutorial-writing-tasks.html Index: tutorial-writing-tasks.html =================================================================== RCS file: /home/cvs/ant/docs/manual/tutorial-writing-tasks.html,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- tutorial-writing-tasks.html 9 Feb 2004 21:50:05 -0000 1.4 +++ tutorial-writing-tasks.html 16 Nov 2004 08:12:31 -0000 1.5 @@ -44,52 +44,52 @@ </ul> So the buildfile contains three targets. <pre class="code"> -<?xml version="1.0" encoding="ISO-8859-1"?> -<project name="MyTask" basedir="." default="jar"> +<?xml version="1.0" encoding="ISO-8859-1"?> +<project name="MyTask" basedir="." default="jar"> - <target name="clean" description="Delete all generated files"> - <delete dir="classes"/> - <delete file="MyTasks.jar"/> - </target> - - <target name="compile" description="Compiles the Task"> - <javac srcdir="src" destdir="classes"/> - </target> - - <target name="jar" description="JARs the Task"> - <jar destfile="MyTask.jar" basedir="classes"/> - </target> + <target name="clean" description="Delete all generated files"> + <delete dir="classes"/> + <delete file="MyTasks.jar"/> + </target> + + <target name="compile" description="Compiles the Task"> + <javac srcdir="src" destdir="classes"/> + </target> + + <target name="jar" description="JARs the Task"> + <jar destfile="MyTask.jar" basedir="classes"/> + </target> -</project> +</project> </pre> This buildfile uses often the same value (src, classes, MyTask.jar), so we should rewrite that -using <property>s. On second there are some handicaps: <javac> requires that the destination +using <property>s. On second there are some handicaps: <javac> requires that the destination directory exists; a call of "clean" with a non existing classes directory will fail; "jar" requires the execution of some steps bofore. So the refactored code is: <pre class="code"> -<?xml version="1.0" encoding="ISO-8859-1"?> -<project name="MyTask" basedir="." default="jar"> +<?xml version="1.0" encoding="ISO-8859-1"?> +<project name="MyTask" basedir="." default="jar"> - <b><property name="src.dir" value="src"/></b> - <b><property name="classes.dir" value="classes"/></b> + <b><property name="src.dir" value="src"/></b> + <b><property name="classes.dir" value="classes"/></b> - <target name="clean" description="Delete all generated files"> - <delete dir="<b>${classes.dir}</b>" <b>failonerror="false"</b>/> - <delete file="<b>${ant.project.name}.jar</b>"/> - </target> - - <target name="compile" description="Compiles the Task"> - <b><mkdir dir="${classes.dir}"/></b> - <javac srcdir="<b>${src.dir}</b>" destdir="${classes.dir}"/> - </target> - - <target name="jar" description="JARs the Task" <b>depends="compile"</b>> - <jar destfile="${ant.project.name}.jar" basedir="${classes.dir}"/> - </target> + <target name="clean" description="Delete all generated files"> + <delete dir="<b>${classes.dir}</b>" <b>failonerror="false"</b>/> + <delete file="<b>${ant.project.name}.jar</b>"/> + </target> + + <target name="compile" description="Compiles the Task"> + <b><mkdir dir="${classes.dir}"/></b> + <javac srcdir="<b>${src.dir}</b>" destdir="${classes.dir}"/> + </target> + + <target name="jar" description="JARs the Task" <b>depends="compile"</b>> + <jar destfile="${ant.project.name}.jar" basedir="${classes.dir}"/> + </target> -</project> +</project> </pre> <i>ant.project.name</i> is one of the <a href="http://ant.apache.org/manual/using.html#built-in-props" target="_blank"> @@ -118,19 +118,19 @@ <p>But after creating the jar we want to use our new Task. Therefore we need a new target "use". Before we can use our new task we have to declare it with <a href="http://ant.apache.org/manual/CoreTasks/taskdef.html" target="_blank"> -<taskdef> [2]</a>. And for easier process we change the default clause: +<taskdef> [2]</a>. And for easier process we change the default clause: <pre class="code"> -<?xml version="1.0" encoding="ISO-8859-1"?> -<project name="MyTask" basedir="." default="<b>use</b>"> +<?xml version="1.0" encoding="ISO-8859-1"?> +<project name="MyTask" basedir="." default="<b>use</b>"> ... - <b><target name="use" description="Use the Task" depends="jar"> - <taskdef name="helloworld" classname="HelloWorld" classpath="${ant.project.name}.jar"/> - <helloworld/> - </target></b> + <b><target name="use" description="Use the Task" depends="jar"> + <taskdef name="helloworld" classname="HelloWorld" classpath="${ant.project.name}.jar"/> + <helloworld/> + </target></b> -</project> +</project> </pre> Important is the <i>classpath</i>-attribute. Ant searches in its /lib directory for @@ -226,8 +226,8 @@ <a name="attributes"> <h2>Attributes</h2> <p>Now we want to specify the text of our message (it seems that we are -rewriting the <echo/> task :-). First we well do that with an attribute. -It is very easy - for each attribute provide a <tt>public void set<attributename>(<type> +rewriting the <echo/> task :-). First we well do that with an attribute. +It is very easy - for each attribute provide a <tt>public void set<attributename>(<type> newValue)</tt> method and Ant will do the rest via reflection.</p> <pre class="code"> import org.apache.tools.ant.Task; @@ -257,12 +257,12 @@ <p>After that we have to modify our buildfile: <pre class="code"> - <target name="use" description="Use the Task" depends="jar"> + <target name="use" description="Use the Task" depends="jar"> <taskdef name="helloworld" classname="HelloWorld" - classpath="${ant.project.name}.jar"/> - <helloworld <b>message="Hello World"</b>/> - </target> + classpath="${ant.project.name}.jar"/> + <helloworld <b>message="Hello World"</b>/> + </target> </pre> That's all.</p> @@ -275,13 +275,13 @@ <a href="http://ant.apache.org/manual/develop.html#set-magic">Manual 'Writing Your Own Task' [3]</a>)</li> </ul> -Before calling the set-method all properties are resolved. So a <tt><helloworld message="${msg}"/></tt> +Before calling the set-method all properties are resolved. So a <tt><helloworld message="${msg}"/></tt> would not set the message string to "${msg}" if there is a property "msg" with a set value. <a name="NestedText"></a> <h2>Nested Text</h2> -<p>Maybe you have used the <echo> task in a way like <tt><echo>Hello World</echo></tt>. +<p>Maybe you have used the <echo> task in a way like <tt><echo>Hello World</echo></tt>. For that you have to provide a <tt>public void addText(String text)</tt> method. <pre class="code"> ... @@ -305,7 +305,7 @@ We use the first way of the three described ways. There are several steps for that:<ol> <li>We create a class for collecting all the infos the nested element should contain. This class is created by the same rules for attributes and nested elements - as for the task (set<attributename>() methods). </li> + as for the task (set<attributename>() methods). </li> <li>The task holds multiple instances of this class in a list.</li> <li>A factory method instantiates an object, saves the reference in the list and returns it to Ant Core.</li> @@ -346,10 +346,10 @@ <tt>public <i>classname</i> create<i>XML-name</i>()</tt>. Therefore we write in the buildfile <pre class="code"> - <helloworld> - <message msg="Nested Element 1"/> - <message msg="Nested Element 2"/> - </helloworld> + <helloworld> + <message msg="Nested Element 1"/> + <message msg="Nested Element 2"/> + </helloworld> </pre> @@ -357,76 +357,76 @@ <h2>Our task in a little more complex version</h2> <p>For recapitulation now a little refactored buildfile: <pre class="code"> -<?xml version="1.0" encoding="ISO-8859-1"?> -<project name="MyTask" basedir="." default="use"> +<?xml version="1.0" encoding="ISO-8859-1"?> +<project name="MyTask" basedir="." default="use"> - <property name="src.dir" value="src"/> - <property name="classes.dir" value="classes"/> + <property name="src.dir" value="src"/> + <property name="classes.dir" value="classes"/> - <target name="clean" description="Delete all generated files"> - <delete dir="${classes.dir}" failonerror="false"/> - <delete file="${ant.project.name}.jar"/> - </target> - - <target name="compile" description="Compiles the Task"> - <mkdir dir="${classes.dir}"/> - <javac srcdir="${src.dir}" destdir="${classes.dir}"/> - </target> - - <target name="jar" description="JARs the Task" depends="compile"> - <jar destfile="${ant.project.name}.jar" basedir="${classes.dir}"/> - </target> + <target name="clean" description="Delete all generated files"> + <delete dir="${classes.dir}" failonerror="false"/> + <delete file="${ant.project.name}.jar"/> + </target> + + <target name="compile" description="Compiles the Task"> + <mkdir dir="${classes.dir}"/> + <javac srcdir="${src.dir}" destdir="${classes.dir}"/> + </target> + + <target name="jar" description="JARs the Task" depends="compile"> + <jar destfile="${ant.project.name}.jar" basedir="${classes.dir}"/> + </target> <target name="use.init" description="Taskdef the HelloWorld-Task" - depends="jar"> + depends="jar"> <taskdef name="helloworld" classname="HelloWorld" - classpath="${ant.project.name}.jar"/> - </target> + classpath="${ant.project.name}.jar"/> + </target> <target name="use.without" description="Use without any" - depends="use.init"> - <helloworld/> - </target> + depends="use.init"> + <helloworld/> + </target> <target name="use.message" description="Use with attribute 'message'" - depends="use.init"> - <helloworld message="attribute-text"/> - </target> + depends="use.init"> + <helloworld message="attribute-text"/> + </target> <target name="use.fail" description="Use with attribute 'fail'" - depends="use.init"> - <helloworld fail="true"/> - </target> + depends="use.init"> + <helloworld fail="true"/> + </target> <target name="use.nestedText" description="Use with nested text" - depends="use.init"> - <helloworld>nested-text</helloworld> - </target> + depends="use.init"> + <helloworld>nested-text</helloworld> + </target> <target name="use.nestedElement" description="Use with nested 'message'" - depends="use.init"> - <helloworld> - <message msg="Nested Element 1"/> - <message msg="Nested Element 2"/> - </helloworld> - </target> + depends="use.init"> + <helloworld> + <message msg="Nested Element 1"/> + <message msg="Nested Element 2"/> + </helloworld> + </target> <target name="use" description="Try all (w/out use.fail)" depends="use.without,use.message,use.nestedText,use.nestedElement" - /> + /> -</project> +</project> </pre> And the code of the task: @@ -505,7 +505,7 @@ And it works: <pre class="output"> -C:\tmp\anttests\MyFirstTask>ant +C:\tmp\anttests\MyFirstTask>ant Buildfile: build.xml compile: @@ -537,7 +537,7 @@ BUILD SUCCESSFUL Total time: 3 seconds -C:\tmp\anttests\MyFirstTask>ant use.fail +C:\tmp\anttests\MyFirstTask>ant use.fail Buildfile: build.xml compile: @@ -552,7 +552,7 @@ C:\tmp\anttests\MyFirstTask\build.xml:36: Fail requested. Total time: 1 second -C:\tmp\anttests\MyFirstTask> +C:\tmp\anttests\MyFirstTask> </pre> Next step: test ... @@ -580,66 +580,66 @@ <a href="http://gump.covalent.net/jars/latest/ant/ant-testutil.jar"> http://gump.covalent.net/jars/latest/ant/ant-testutil.jar [5]</a>.</p> -<p>For executing the test and creating a report we need the optional tasks <junit> -and <junitreport>. So we add to the buildfile: +<p>For executing the test and creating a report we need the optional tasks <junit> +and <junitreport>. So we add to the buildfile: <pre class="code"> ... <font color="#9F9F9F"><project name="MyTask" basedir="." </font>default="test"<font color="#9F9F9F">></font> ... - <property name="ant.test.lib" value="ant-testutil.jar"/> - <property name="report.dir" value="report"/> - <property name="junit.out.dir.xml" value="${report.dir}/junit/xml"/> - <property name="junit.out.dir.html" value="${report.dir}/junit/html"/> - - <path id="classpath.run"> - <path path="${java.class.path}"/> - <path location="${ant.project.name}.jar"/> - </path> - - <path id="classpath.test"> - <path refid="classpath.run"/> - <path location="${ant.test.lib}"/> - </path> - - <target name="clean" description="Delete all generated files"> - <delete failonerror="false" includeEmptyDirs="true"> - <fileset dir="." includes="${ant.project.name}.jar"/> - <fileset dir="${classes.dir}"/> - <fileset dir="${report.dir}"/> - </delete> - </target> - - <font color="#9F9F9F"><target name="compile" description="Compiles the Task"> - <mkdir dir="${classes.dir}"/> - <javac srcdir="${src.dir}" destdir="${classes.dir}" </font>classpath="${ant.test.lib}"<font color="#9F9F9F">/> - </target></font> + <property name="ant.test.lib" value="ant-testutil.jar"/> + <property name="report.dir" value="report"/> + <property name="junit.out.dir.xml" value="${report.dir}/junit/xml"/> + <property name="junit.out.dir.html" value="${report.dir}/junit/html"/> + + <path id="classpath.run"> + <path path="${java.class.path}"/> + <path location="${ant.project.name}.jar"/> + </path> + + <path id="classpath.test"> + <path refid="classpath.run"/> + <path location="${ant.test.lib}"/> + </path> + + <target name="clean" description="Delete all generated files"> + <delete failonerror="false" includeEmptyDirs="true"> + <fileset dir="." includes="${ant.project.name}.jar"/> + <fileset dir="${classes.dir}"/> + <fileset dir="${report.dir}"/> + </delete> + </target> + + <font color="#9F9F9F"><target name="compile" description="Compiles the Task"> + <mkdir dir="${classes.dir}"/> + <javac srcdir="${src.dir}" destdir="${classes.dir}" </font>classpath="${ant.test.lib}"<font color="#9F9F9F">/> + </target></font> ... - <target name="junit" description="Runs the unit tests" depends="jar"> - <delete dir="${junit.out.dir.xml}" /> - <mkdir dir="${junit.out.dir.xml}" /> - <junit printsummary="yes" haltonfailure="no"> - <classpath refid="classpath.test"/> - <formatter type="xml"/> - <batchtest fork="yes" todir="${junit.out.dir.xml}"> - <fileset dir="${src.dir}" includes="**/*Test.java"/> - </batchtest> - </junit> - </target> - - <target name="junitreport" description="Create a report for the rest result"> - <mkdir dir="${junit.out.dir.html}" /> - <junitreport todir="${junit.out.dir.html}"> - <fileset dir="${junit.out.dir.xml}"> - <include name="*.xml"/> - </fileset> - <report format="frames" todir="${junit.out.dir.html}"/> - </junitreport> - </target> + <target name="junit" description="Runs the unit tests" depends="jar"> + <delete dir="${junit.out.dir.xml}"/> + <mkdir dir="${junit.out.dir.xml}"/> + <junit printsummary="yes" haltonfailure="no"> + <classpath refid="classpath.test"/> + <formatter type="xml"/> + <batchtest fork="yes" todir="${junit.out.dir.xml}"> + <fileset dir="${src.dir}" includes="**/*Test.java"/> + </batchtest> + </junit> + </target> + + <target name="junitreport" description="Create a report for the rest result"> + <mkdir dir="${junit.out.dir.html}"/> + <junitreport todir="${junit.out.dir.html}"> + <fileset dir="${junit.out.dir.xml}"> + <include name="*.xml"/> + </fileset> + <report format="frames" todir="${junit.out.dir.html}"/> + </junitreport> + </target> <target name="test" depends="junit,junitreport" description="Runs unit tests and creates a report" - /> + /> ... </pre></p> @@ -693,7 +693,7 @@ <p>When starting <tt>ant</tt> we'll get a short message to STDOUT and a nice HTML-report. <pre class="output"> -C:\tmp\anttests\MyFirstTask>ant +C:\tmp\anttests\MyFirstTask>ant Buildfile: build.xml compile: @@ -719,7 +719,7 @@ BUILD SUCCESSFUL Total time: 7 seconds -C:\tmp\anttests\MyFirstTask> +C:\tmp\anttests\MyFirstTask> </pre></p> 1.16 +2 -2 ant/docs/manual/CoreTasks/changelog.html Index: changelog.html =================================================================== RCS file: /home/cvs/ant/docs/manual/CoreTasks/changelog.html,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- changelog.html 9 Feb 2004 21:50:05 -0000 1.15 +++ changelog.html 16 Nov 2004 08:12:31 -0000 1.16 @@ -213,9 +213,9 @@ <revision>1.3</revision> <prevrevision>1.2</prevrevision> </file> - <msg><![CDATA[Use URLs directly rather than go via a FIle. + <msg><![CDATA[Use URLs directly rather than go via a File. -This allows temp[lates to be stored inside jar]]></msg> +This allows templates to be stored inside jar]]></msg> </entry> </changelog> </pre> 1.17 +2 -2 ant/docs/manual/CoreTasks/chmod.html Index: chmod.html =================================================================== RCS file: /home/cvs/ant/docs/manual/CoreTasks/chmod.html,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- chmod.html 9 Feb 2004 21:50:05 -0000 1.16 +++ chmod.html 16 Nov 2004 08:12:31 -0000 1.17 @@ -147,8 +147,8 @@ </blockquote> <p>keeps non-owners from touching cgi scripts, files with a <code>.old</code> -extension or directories begining with <code>private_</code>. A directory -ending in <code>.old</code> or a file begining with private_ would remain +extension or directories beginning with <code>private_</code>. A directory +ending in <code>.old</code> or a file beginning with private_ would remain unaffected.</p> <hr> 1.21 +12 -12 ant/docs/manual/CoreTypes/filterchain.html Index: filterchain.html =================================================================== RCS file: /home/cvs/ant/docs/manual/CoreTypes/filterchain.html,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- filterchain.html 15 Oct 2004 17:05:54 -0000 1.20 +++ filterchain.html 16 Nov 2004 08:12:34 -0000 1.21 @@ -648,34 +648,34 @@ <TABLE> <TR> <TD bgcolor="#C0C0C0"> </TD> - <TD><PRE><filterchain> + <TD><PRE><filterchain> <headfilter lines="2"/> -</filterchain></PRE></TD> +</filterchain></PRE></TD> </TR> <TR> <TD bgcolor="#FF00FF"> </TD> - <TD><PRE><filterchain> + <TD><PRE><filterchain> <tailfilter lines="-1" skip="2"/> -</filterchain></PRE></TD> +</filterchain></PRE></TD> </TR> <TR> <TD bgcolor="#008000"> </TD> - <TD><PRE><filterchain> + <TD><PRE><filterchain> <headfilter lines="-1" skip="2"/> -</filterchain></PRE></TD> +</filterchain></PRE></TD> </TR> <TR> <TD bgcolor="#0000FF"> </TD> - <TD><PRE><filterchain> - <headfilter lines="-1" skip="2"/> - <tailfilter lines="-1" skip="2"/> -</filterchain></PRE></TD> + <TD><PRE><filterchain> + <headfilter lines="-1" skip="2"/> + <tailfilter lines="-1" skip="2"/> +</filterchain></PRE></TD> </TR> <TR> <TD bgcolor="#00FF00"> </TD> - <TD><PRE><filterchain> + <TD><PRE><filterchain> <tailfilter lines="2"/> -</filterchain></PRE></TD> +</filterchain></PRE></TD> </TR> </TABLE> </TD> 1.6 +2 -2 ant/docs/manual/CoreTypes/selectors-program.html Index: selectors-program.html =================================================================== RCS file: /home/cvs/ant/docs/manual/CoreTypes/selectors-program.html,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- selectors-program.html 13 Sep 2003 16:35:52 -0000 1.5 +++ selectors-program.html 16 Nov 2004 08:12:34 -0000 1.6 @@ -201,9 +201,9 @@ As an example of an error JUnit could log<pre> [junit] FAILED [junit] Error for files: <font color=blue>.;copy.filterset.filtered;tar/gz/asf-logo.gif.tar.gz</font> - [junit] expected:<<font color=blue>FTTTFTTTF...</font>> but was:<TTTTTTTTT...> + [junit] expected:<<font color=blue>FTTTFTTTF...</font>> but was:<TTTTTTTTT...> [junit] junit.framework.ComparisonFailure: Error for files: .;copy.filterset.filtered;tar/gz/asf-logo.gif.tar.gz - [junit] expected:<FTTTFTTTF...> but was:<TTTTTTTTT...> + [junit] expected:<FTTTFTTTF...> but was:<TTTTTTTTT...> [junit] at junit.framework.Assert.assertEquals(Assert.java:81) [junit] at org.apache.tools.ant.types.selectors.BaseSelectorTest.performTest(BaseSelectorTest.java:194) </pre></p> 1.26 +44 -44 ant/docs/manual/CoreTypes/selectors.html Index: selectors.html =================================================================== RCS file: /home/cvs/ant/docs/manual/CoreTypes/selectors.html,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- selectors.html 17 Jul 2004 16:08:41 -0000 1.25 +++ selectors.html 16 Nov 2004 08:12:34 -0000 1.26 @@ -613,7 +613,7 @@ <blockquote><pre> <fileset dir="${src}"> - <type type="dir"/> + <type type="dir"/> </fileset> </pre></blockquote> @@ -622,12 +622,12 @@ directory, but avoid selecting empty directories, use: <blockquote><pre> -<fileset dir="${src}"> - <and> - <present targetdir="template"/> - <type type="file"/> - </and> -</fileset> +<fileset dir="${src}"> + <and> + <present targetdir="template"/> + <type type="file"/> + </and> +</fileset> </pre></blockquote> @@ -816,62 +816,62 @@ <p>Here are some examples of how to use the Modified Selector:</p> <blockquote><pre> - <copy todir="dest"> - <fileset dir="src"> - <modified/> - </fileset> - </copy + <copy todir="dest"> + <fileset dir="src"> + <modified/> + </fileset> + </copy> </pre></blockquote> <p>This will copy all files from <i>src</i> to <i>dest</i> which content has changed. Using an updating PropertyfileCache with cache.properties and MD5-DigestAlgorithm.</p> <blockquote><pre> - <copy todir="dest"> - <fileset dir="src"> + <copy todir="dest"> + <fileset dir="src"> <modified update="true" seldirs="true" cache="propertyfile" algorithm="digest" - comparator="equal"> - <param name="cache.cachefile" value="cache.properties"/> - <param name="algorithm.algorithm" value="MD5"/> - </modified> - </fileset> - </copy> + comparator="equal"> + <param name="cache.cachefile" value="cache.properties"/> + <param name="algorithm.algorithm" value="MD5"/> + </modified> + </fileset> + </copy> </pre></blockquote> <p>This is the same example rewritten as CoreSelector with setting the all the values (same as defaults are).</p> <blockquote><pre> - <copy todir="dest"> - <fileset dir="src"> - <custom class="org.apache.tools.ant.types.selectors.modifiedselector.ModifiedSelector"> - <param name="update" value="true"/> - <param name="seldirs" value="true"/> - <param name="cache" value="propertyfile"/> - <param name="algorithm" value="digest"/> - <param name="comparator" value="equal"/> - <param name="cache.cachefile" value="cache.properties"/> - <param name="algorithm.algorithm" value="MD5"/> - </custom> - </fileset> - </copy> + <copy todir="dest"> + <fileset dir="src"> + <custom class="org.apache.tools.ant.types.selectors.modifiedselector.ModifiedSelector"> + <param name="update" value="true"/> + <param name="seldirs" value="true"/> + <param name="cache" value="propertyfile"/> + <param name="algorithm" value="digest"/> + <param name="comparator" value="equal"/> + <param name="cache.cachefile" value="cache.properties"/> + <param name="algorithm.algorithm" value="MD5"/> + </custom> + </fileset> + </copy> </pre></blockquote> <p>And this is the same rewritten as CustomSelector.</p> <blockquote><pre> - <target name="generate-and-upload-site"> - <echo> generate the site using forrest </echo> - <antcall target="site"/> - - <echo> upload the changed file </echo> - <ftp server="${ftp.server}" userid="${ftp.user}" password="${ftp.pwd}"> - <fileset dir="htdocs/manual"> - <modified/> - </fileset> - </ftp> - </target> + <target name="generate-and-upload-site"> + <echo> generate the site using forrest </echo> + <antcall target="site"/> + + <echo> upload the changed file </echo> + <ftp server="${ftp.server}" userid="${ftp.user}" password="${ftp.pwd}"> + <fileset dir="htdocs/manual"> + <modified/> + </fileset> + </ftp> + </target> </pre></blockquote> <p>A useful scenario for this selector inside a build environment for homepage generation (e.g. with <a href="http://xml.apache.org/forrest/"> 1.22 +1 -1 ant/docs/manual/OptionalTasks/replaceregexp.html Index: replaceregexp.html =================================================================== RCS file: /home/cvs/ant/docs/manual/OptionalTasks/replaceregexp.html,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- replaceregexp.html 12 Nov 2004 10:36:28 -0000 1.21 +++ replaceregexp.html 16 Nov 2004 08:12:35 -0000 1.22 @@ -123,7 +123,7 @@ <blockquote> <pre> -<html> <body> +<html> <body> <<TAB>><h1> T E S T </h1> <<TAB>> <<TAB>> </body></html> </pre></blockquote>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]