diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/manual/Types/antlib.html')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/manual/Types/antlib.html | 266 |
1 files changed, 266 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/manual/Types/antlib.html b/framework/src/ant/apache-ant-1.9.6/manual/Types/antlib.html new file mode 100644 index 00000000..925320ae --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/manual/Types/antlib.html @@ -0,0 +1,266 @@ +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<html> + + <head> + <meta http-equiv="Content-Language" content="en-us"></meta> + <link rel="stylesheet" type="text/css" href="../stylesheets/style.css"> + <title>AntLib</title> + </head> + + <body> + <h2><a name="antlib">Antlib</a></h2> + + + <h3>Description</h3> + <p> + An antlib file is an xml file with a root element of "antlib". + Antlib's elements are Apache Ant definition tasks - like + <a href="../Tasks/taskdef.html">Taskdef</a> + or any Ant task that extends + <code>org.apache.tools.ant.taskdefs.AntlibDefinition</code>. + </p> + <p> + The current set of declarations bundled with Ant that do this are: + </p> + <ol> + <li><a href="../Tasks/typedef.html">Typedef</a> + </li> + <li><a href="../Tasks/taskdef.html">Taskdef</a> + </li> + <li><a href="../Tasks/macrodef.html">Macrodef</a> + </li> + <li><a href="../Tasks/presetdef.html">Presetdef</a> + </li> + <li><a href="../Tasks/scriptdef.html">Scriptdef</a> + </li> + </ol> + <p> + A group of tasks and types may be defined together in an antlib + file. For example the file <i>sample.xml</i> contains the following: + </p> + <blockquote> + <pre> +<?xml version="1.0"?> +<antlib> + <typedef name="if" classname="org.acme.ant.If"/> + <typedef name="scriptpathmapper" + classname="org.acme.ant.ScriptPathMapper" + onerror="ignore"/> + <macrodef name="print"> + <attribute name="file"/> + <sequential> + <concat taskname="print"> + <fileset dir="." includes="@{file}"/> + </concat> + </sequential> + </macrodef> +</antlib> + </pre> + </blockquote> + <p> + It defines two types or tasks, <i>if</i> and <i>scriptpathmapper</i>. + This antlib file may be used in a build script as follows: + </p> + <blockquote> + <pre> +<typedef file="sample.xml"/> + </pre> + </blockquote> + <p> + The other attributes of <code><typedef></code> may be used as well. + For example, assuming that the <i>sample.xml</i> is in a jar + file <i>sample.jar</i> also containing the classes, the + following build fragment will define the <i>if</i> and <i>scriptpathmapper</i> + tasks/types and place them in the namespace uri <i>samples:/acme.org</i>. + </p> + <blockquote> + <pre> +<typedef resource="org/acme/ant/sample.xml" + uri="samples:/acme.org"/> + </pre> + </blockquote> + <p> + The definitions may then be used as follows: + </p> + <blockquote> + <pre> +<sample:if valuetrue="${props}" xmlns:sample="samples:/acme.org"> + <sample:scriptpathmapper language="beanshell"> + some bean shell + </sample:scriptpathmapper> +</sample:if> + </pre> + </blockquote> + + + <h3><a name="antlibnamespace">Antlib namespace</a></h3> + <p> + The name space URIs with the pattern <b>antlib:<i>java package</i></b> + are given special treatment. + </p> + <p> + When Ant encounters a element with a namespace URI with this pattern, it + will check to see if there is a resource of the name <i>antlib.xml</i> in + the package directory in the default classpath. + </p> + <p> + For example, assuming that the file <i>antcontrib.jar</i> has been placed + in the directory <i>${ant.home}/lib</i> and it contains the resource + <i>net/sf/antcontrib/antlib.xml</i> which has all antcontrib's definitions + defined, the following build file will automatically load the antcontrib + definitions at location <i>HERE</i>: + </p> + <blockquote> + <pre> +<project default="deletetest" xmlns:antcontrib="antlib:net.sf.antcontrib"> + <macrodef name="showdir"> + <attribute name="dir"/> + <sequential> + <antcontrib:shellscript shell="bash"> <!-- HERE --> + ls -Rl @{dir} + </antcontrib:shellscript> + </sequential> + </macrodef> + + <target name="deletetest"> + <delete dir="a" quiet="yes"/> + <mkdir dir="a/b"/> + <touch file="a/a.txt"/> + <touch file="a/b/b.txt"/> + <delete> + <fileset dir="a"/> + </delete> + <showdir dir="a"/> + </target> +</project> + </pre> + </blockquote> + <p> + The requirement that the resource is in the default classpath + may be removed in future versions of Ant.</p> + </p> + + + <h3><a name="loadFromInside">Load antlib from inside of the buildfile</a></h3> + <p> + If you want to separate the antlib from your local Ant installation, e.g. because you + want to hold that jar in your projects SCM system, you have to specify a classpath, so + that Ant could find that jar. The best solution is loading the antlib with <tt><taskdef></tt>. + </p> + <blockquote> + <pre> +<project xmlns:<font color="green">antcontrib</font>="<font color="red">antlib:net.sf.antcontrib</font>"> + <taskdef uri="<font color="red">antlib:net.sf.antcontrib</font>" + resource="net/sf/antcontrib/antlib.xml" + classpath="path/to/ant-contrib.jar"/> + + <target name="iterate"> + <<font color="green">antcontrib</font>:for param="file"> + <fileset dir="."/> + <sequential> + <echo message="- @{file}"/> + </sequential> + </antcontrib:for> + </target> +</project> + </pre> + </blockquote> + + + + + <h3><a name="currentnamespace">Current namespace</a></h3> + <p> + Definitions defined in antlibs may be used in antlibs. However + the namespace that definitions are placed in are dependent on + the <code><typedef></code> that uses the antlib. To deal with this + problem, the definitions are placed in the namespace URI <i>ant:current</i> + for the duration of the antlib execution. + For example the following antlib defines the task <code><if></code>, the + type <code><isallowed></code> and a macro + <code><ifallowed></code> that makes use of the task and type: + </p> + <blockquote> + <pre> +<antlib xmlns:current="ant:current"> + <taskdef name="if" classname="org.acme.ant.If"/> + <typedef name="isallowed" classname="org.acme.ant.Isallowed"/> + <macrodef name="ifallowed"> + <attribute name="action"/> + <element name="do"/> + <sequential> + <current:if> + <current:isallowed test="@{action}"/> + <current:then> + <do/> + </current:then> + </current:if> + </sequential> + </macrodef> +</antlib> + </pre> + </blockquote> + + + <h3>Other examples and comments</h3> + <p> + Antlibs may make use of other antlibs. + </p> + <p> + As the names defined in the antlib are in the namespace uri as + specified by the calling <code><typedef></code> or by automatic element + resolution, one may reuse names from core ant types and tasks, + provided the caller uses a namespace uri. For example, the + following antlib may be used to define defaults for various + tasks: + </p> + <blockquote> + <pre> +<antlib xmlns:antcontrib="antlib:net.sf.antcontrib"> + <presetdef name="javac"> + <javac deprecation="${deprecation}" + debug="${debug}"/> + </presetdef> + <presetdef name="delete"> + <delete quiet="yes"/> + </presetdef> + <presetdef name="shellscript"> + <antcontrib:shellscript shell="bash"/> + </presetdef> +</antlib> + </pre> + </blockquote> + <p> + This may be used as follows: + </p> + <blockquote> + <pre> +<project xmlns:local="localpresets"> + <typedef file="localpresets.xml" uri="localpresets"/> + <local:shellscript> + echo "hello world" + </local:shellscript> +</project> + </pre> + </blockquote> + + + +</body> +</html> + |