java left logo
java middle logo
java right logo
 

Home arrow Other API Tips
 
 
Main Menu
Home
Java Tutorials
Book Reviews
Java SE Tips
Java ME Tips
Java EE Tips
Other API Tips
Java Applications
Java Libraries
Java Games
Java Network
Java Forums
Java Blog




Most Visited Tips
Java SE Tips
Java ME Tips
Java EE Tips
Other API Tips
Java Applications
Java Libraries
Java Games
Book Reviews
Top Rated Tips
Java SE Tips
Java ME Tips
Java EE Tips
Other API Tips
Java Applications
Java Libraries
Java Games
Book Reviews


Statistics
Registered Users: 4094
Java SE Tips: 614
Java ME Tips: 202
Java EE Tips: 183
Other API Tips: 779
Java Applications: 298
Java Libraries: 209
Java Games: 16
Book Reviews:
 
 
 
How to use Scriptdef task E-mail
User Rating: / 3
PoorBest 

Scriptdef

Description

Scriptdef can be used to define an Ant task using a scripting language. Ant scripting languages supported by Apache BSF may be used to define the script. Scriptdef provides a mechanism to encapsulate control logic from a build within an Ant task minimizing the need for providing control style tasks in Ant itself. Complex logic can be made available while retaining the simple structure of an Ant build file. Scriptdef is also useful for prototyping new custom tasks. Certainly as the complexity of the script increases it would be better to migrate the task definition into a Java based custom task.

Note: This task depends on external libraries not included in the Ant distribution. See Library Dependencies for more information.

The attributes and nested elements supported by the task may be defined using <attribute> and <element> nested elements. These are available to the script that implements the task as two collection style script variables attributes and elements. The elements in the attributes collection may be accessed by the attribute name. The elements collection is accessed by the nested element name. This will return a list of all instances of the nested element. The instances in this list may be accessed by an integer index.

Note: Ant will turn all attribute and element names into all lowercase names, so even if you use name="SomeAttribute", you'll have to use "someattribute" to retrieve the attribute's value from the attributes collection.

The name "project" is a pre-defined reference to the Ant Project. For more information on writing scripts, please refer to the <script> task

Parameters

Attribute Description Required
name the name of the task to be created using the script Yes
language The programming language the script is written in. Must be a supported Apache BSF language Yes
src The location of the script as a file, if not inline No
uri The XML namespace uri that this definition should live in. No

Nested elements

attribute

Attribute Description Required
name the name of the attribute Yes

element

Attribute Description Required
name the name of the nested element to be supported by the task defined by the script Yes
classname the classname of the class to be used for the nested element. This specifies the class directly and is an alternative to specifying the Ant type name. No
type This is the name of an Ant task or type which is to be used when this element is to be created. This is an alternative to specifying the class name directly No

Examples

The following definition creates a task which supports an attribute called attr and two nested elements, one being a fileset and the other a path. When executed, the resulting task logs the value of the attribute and the basedir of the first fileset.

  <scriptdef name="scripttest" language="javascript">
    <attribute name="attr1"/>

    <element name="fileset" type="fileset"/>
    <element name="path" type="path"/>
    <![CDATA[

      project.log("Hello from script");
      project.log("Attribute attr1 = " + attributes.get("attr1"));
      project.log("First fileset basedir = "

        + elements.get("fileset").get(0).getDir(project));

    ]]>
  </scriptdef>

  <scripttest attr1="test">
    <path>
      <pathelement location="src"/>

    </path>
    <fileset dir="src"/>
    <fileset dir="main"/>
  </scripttest>

The following variation on the above script lists the number of fileset elements and iterates through them

  <scriptdef name="scripttest2" language="javascript">
    <element name="fileset" type="fileset"/>

    <![CDATA[
      filesets = elements.get("fileset");
      project.log("Number of filesets = " + filesets.size());
      for (i = 0; i < filesets.size(); ++i) {
        project.log("fileset " + i + " basedir = "
          + filesets.get(i).getDir(project));
      }
    ]]>

  </scriptdef&gt

  <scripttest2>
    <fileset dir="src"/>
    <fileset dir="main"/>

  </scripttest2>

When a script has a syntax error, the scriptdef name will be listed in the error. For example in the above script, removing the closing curly bracket would result in this error

build.xml:15: SyntaxError: missing } in compound statement (scriptdef <scripttest2>; line 10)

Script errors are only detected when a script task is actually executed.

Source: Apache Ant


 Related Tips

 
< Prev   Next >

Page 1 of 0 ( 0 comments )

You can share your information about this topic using the form below!

Please do not post your questions with this form! Thanks.


Name (required)


E-Mail (required)

Your email will not be displayed on the site - only to our administrator
Homepage(optional)



Comment Enable HTML code : Yes No



 
       
         
     
 
 
 
   
 
 
java bottom left
java bottom middle
java bottom right
RSS 0.91 FeedRSS 1.0 FeedRSS 2.0 FeedATOM FeedOPML Feed

Home - About Us - Privacy Policy
Copyright 2005 - 2008 www.java-tips.org
Java is a trademark of Sun Microsystems, Inc.