2001-02-13 12:32:01 +00:00
|
|
|
|
<html>
|
|
|
|
|
|
|
|
|
|
<head>
|
|
|
|
|
<meta http-equiv="Content-Language" content="en-us">
|
2002-02-03 22:11:39 +00:00
|
|
|
|
<title>Script Task</title>
|
2001-02-13 12:32:01 +00:00
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
<body>
|
|
|
|
|
|
|
|
|
|
<h2><a name="script">Script</a></h2>
|
|
|
|
|
<h3>Description</h3>
|
|
|
|
|
<p>Execute a script in a
|
2002-11-14 07:48:25 +00:00
|
|
|
|
<a href="http://jakarta.apache.org/bsf" target="_top">Apache BSF</a> supported language.</p>
|
2001-08-30 13:23:14 +00:00
|
|
|
|
<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>
|
2001-02-13 12:32:01 +00:00
|
|
|
|
<p>All items (tasks, targets, etc) of the running project are
|
|
|
|
|
accessible from the script, using either their <code>name</code> or
|
2002-06-01 12:26:43 +00:00
|
|
|
|
<code>id</code> attributes (as long as their names are considered
|
|
|
|
|
valid Java identifiers, that is).
|
|
|
|
|
The name "project" is a pre-defined reference to the Project, which can be
|
2003-06-16 10:09:09 +00:00
|
|
|
|
used instead of the project name. The name "self" is a pre-defined reference to the actual
|
|
|
|
|
<script>-Task instance.<br>From these objects you have access to the Ant Java API, see the
|
|
|
|
|
<a href="../api/index.html">JavaDoc</a> (especially for
|
|
|
|
|
<a href="../api/org/apache/tools/ant/Project.html">Project</a> and
|
|
|
|
|
<a href="../api/org/apache/tools/ant/taskdefs/optional/Script.html">Script</a>) for more information.</p>
|
|
|
|
|
<p>If you are using JavaScript a good resource is <a target="_blank" href="http://www.mozilla.org/rhino/doc.html">
|
|
|
|
|
http://www.mozilla.org/rhino/doc.html</a> as we are using their JavaScript interpreter.</p>
|
2001-02-13 12:32:01 +00:00
|
|
|
|
<p>Scripts can do almost anything a task written in Java could do.</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">language</td>
|
|
|
|
|
<td valign="top">The programming language the script is written in.
|
2002-11-14 07:48:25 +00:00
|
|
|
|
Must be a supported Apache BSF language</td>
|
2002-07-09 21:06:15 +00:00
|
|
|
|
<td valign="top" align="center">Yes</td>
|
2001-02-13 12:32:01 +00:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td valign="top">src</td>
|
|
|
|
|
<td valign="top">The location of the script as a file, if not inline</td>
|
|
|
|
|
<td valign="top" align="center">No</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
<h3>Examples</h3>
|
|
|
|
|
<blockquote><pre>
|
|
|
|
|
<project name="squares" default="main" basedir=".">
|
|
|
|
|
|
|
|
|
|
<target name="setup">
|
|
|
|
|
|
|
|
|
|
<script language="javascript"> <![CDATA[
|
|
|
|
|
|
|
|
|
|
for (i=1; i<=10; i++) {
|
|
|
|
|
echo = squares.createTask("echo");
|
|
|
|
|
main.addTask(echo);
|
|
|
|
|
echo.setMessage(i*i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
]]> </script>
|
|
|
|
|
|
|
|
|
|
</target>
|
|
|
|
|
|
|
|
|
|
<target name="main" depends="setup"/>
|
|
|
|
|
|
|
|
|
|
</project>
|
|
|
|
|
</pre></blockquote>
|
|
|
|
|
<p>generates</p>
|
|
|
|
|
<blockquote><pre>
|
|
|
|
|
setup:
|
|
|
|
|
|
|
|
|
|
main:
|
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
|
9
|
|
|
|
|
16
|
|
|
|
|
25
|
|
|
|
|
36
|
|
|
|
|
49
|
|
|
|
|
64
|
|
|
|
|
81
|
|
|
|
|
100
|
|
|
|
|
|
|
|
|
|
BUILD SUCCESSFUL
|
|
|
|
|
</pre></blockquote>
|
|
|
|
|
<p>Another example, using <a href="../using.html#references">references by id</a>
|
|
|
|
|
and two different scripting languages:</p>
|
|
|
|
|
<blockquote><pre>
|
|
|
|
|
<project name="testscript" default="main">
|
|
|
|
|
<target name="sub">
|
|
|
|
|
<echo id="theEcho"/>
|
|
|
|
|
</target>
|
|
|
|
|
|
|
|
|
|
<target name="sub1">
|
|
|
|
|
<script language="netrexx"><![CDATA[
|
|
|
|
|
theEcho.setMessage("In sub1")
|
|
|
|
|
sub.execute
|
|
|
|
|
]]></script>
|
|
|
|
|
</target>
|
|
|
|
|
|
|
|
|
|
<target name="sub2">
|
|
|
|
|
<script language="javascript"><![CDATA[
|
|
|
|
|
theEcho.setMessage("In sub2");
|
|
|
|
|
sub.execute();
|
|
|
|
|
]]></script>
|
|
|
|
|
</target>
|
|
|
|
|
|
|
|
|
|
<target name="main" depends="sub1,sub2"/>
|
|
|
|
|
</project>
|
|
|
|
|
</pre></blockquote>
|
|
|
|
|
<p>generates</p>
|
|
|
|
|
<blockquote><pre>
|
|
|
|
|
sub1:
|
|
|
|
|
In sub1
|
|
|
|
|
|
|
|
|
|
sub2:
|
|
|
|
|
In sub2
|
|
|
|
|
|
|
|
|
|
main:
|
|
|
|
|
|
|
|
|
|
BUILD SUCCESSFUL
|
|
|
|
|
</pre></blockquote>
|
|
|
|
|
|
2003-06-16 10:09:09 +00:00
|
|
|
|
<p>Now a more complex example using the Java API and the Ant API. The goal is to list the
|
|
|
|
|
filesizes of all files a <fileset/> caught.</p>
|
|
|
|
|
<blockquote><pre>
|
|
|
|
|
|
|
|
|
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
|
|
|
<project name="<font color=blue>MyProject</font>" basedir="." default="main">
|
|
|
|
|
|
|
|
|
|
<property name="fs.dir" value="src"/>
|
|
|
|
|
<property name="fs.includes" value="**/*.txt"/>
|
|
|
|
|
<property name="fs.excludes" value="**/*.tmp"/>
|
|
|
|
|
|
|
|
|
|
<target name="main">
|
|
|
|
|
<script language="javascript"> <![CDATA[
|
|
|
|
|
|
|
|
|
|
// import statements
|
|
|
|
|
<font color=blue>// importPackage(java.io)</font>;
|
|
|
|
|
<font color=blue>importClass(java.io.File)</font>;
|
|
|
|
|
|
|
|
|
|
// Access to Ant-Properties by their names
|
|
|
|
|
dir = <font color=blue>project</font>.getProperty("fs.dir");
|
|
|
|
|
includes = <font color=blue>MyProject</font>.getProperty("fs.includes");
|
|
|
|
|
excludes = <font color=blue>self.getProject()</font> .<font color=blue>getProperty("fs.excludes")</font>;
|
|
|
|
|
|
|
|
|
|
// Create a <fileset dir="" includes="" />
|
|
|
|
|
fs = project.<font color=blue>createDataType("fileset")</font>;
|
|
|
|
|
fs.setDir( new File(dir) );
|
|
|
|
|
<font color=blue>fs.setIncludes(includes)</font>;
|
|
|
|
|
fs.setExcludes(excludes);
|
|
|
|
|
|
|
|
|
|
// Get the files of that fileset
|
|
|
|
|
ds = fs.getDirectoryScanner(project);
|
|
|
|
|
|
|
|
|
|
// Get the source files (array)
|
|
|
|
|
srcFiles = ds.getIncludedFiles();
|
|
|
|
|
|
|
|
|
|
// iterate over that array
|
|
|
|
|
for (i=0; i<srcFiles.length; i++) {
|
|
|
|
|
|
|
|
|
|
// get the values via Java API
|
|
|
|
|
var basedir = fs.getDir(project);
|
|
|
|
|
var filename = srcFiles[i];
|
|
|
|
|
var file = <font color=blue>new File(basedir, filename)</font>;
|
|
|
|
|
var size = file.length();
|
|
|
|
|
|
|
|
|
|
// create and use a Task via Ant API
|
|
|
|
|
echo = MyProject.<font color=blue>createTask("echo")</font>;
|
|
|
|
|
echo.setMessage(filename + ": " + size + " byte");
|
|
|
|
|
echo.<font color=blue>perform()</font>;
|
|
|
|
|
}
|
|
|
|
|
]]></script>
|
|
|
|
|
</target>
|
|
|
|
|
</project>
|
|
|
|
|
</pre></blockquote>
|
|
|
|
|
<p>We want to use the Java API. Because we don<6F>t want always typing the package signature
|
|
|
|
|
we do an import. Rhino knows to different methods for import statements: one for packages
|
|
|
|
|
and one for a single class. <br>
|
|
|
|
|
The <script> task populates the Project instance under
|
|
|
|
|
the name <i>project</i>, so we can use that reference. Another way is to use its given name
|
|
|
|
|
or getting its reference from the task itself.<br>
|
|
|
|
|
The Project provides methods for accessing and setting properties, creating DataTypes and
|
|
|
|
|
Tasks and much more.<br>
|
|
|
|
|
After creating a FileSet object we initialize that by calling its set-methods. Then we can
|
|
|
|
|
use that object like a normal Ant task (<copy> for example).<br>
|
|
|
|
|
For getting the size of a file we instantiate a <code>java.io.File</code>. So we are using
|
|
|
|
|
normal Java API here.<br>
|
|
|
|
|
Finally we use the <echo> task for producing the output. The task is not executed by
|
|
|
|
|
its execute() method, because the perform() method (implemented in Task itself) does the
|
|
|
|
|
apropriate logging before and after invoking execute().
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
|
2001-02-13 12:32:01 +00:00
|
|
|
|
<hr>
|
2003-06-16 10:09:09 +00:00
|
|
|
|
<p align="center">Copyright © 2000-2003 Apache Software Foundation. All rights
|
2001-02-13 12:32:01 +00:00
|
|
|
|
Reserved.</p>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|