简体   繁体   中英

passing parameters into ANT javascript task?

In my ANT scripts, I sometimes write tasks runnning javascript with Rhino .

However, I am at a loss as to how pass parameters into these tasks. Any ideas?

For example... here is an example of such a task:

<script language="javascript"> <![CDATA[
//some nonsense to fake out rhino into thinking we've a dom, etc.
this.document = { "fake":true };
this.window = new Object( );
this.head = new Object( );
eval(''+new String(org.apache.tools.ant.util.FileUtils.readFully(new java.io.FileReader('coolJavascript.js'))));

//... do some stuff

var s = java.io.File.separator;
var fstream = new java.io.FileWriter( ".." + s + "build" + s + "web" + s + "js" + s + "coolChangedJavascript.js" );
var out = new java.io.BufferedWriter( fstream );
out.write( jsCode );
out.close( );
]]> </script>

For using scripting to define an ant task you can use the scriptdef task instead of script . With scriptdef there are predefined objects to access the attributes and nested elements in your task.

This works for accessing attributes from javascript in Ant:

<scriptdef name="myFileCheck" language="javascript">
    <attribute name="myAttribute" />
    <![CDATA[
      importClass(java.io.File);
      importClass(java.io.FileReader);
      importClass(java.io.BufferedReader);
      var fileName = attributes.get("myAttribute"); //get attribute for scriptdef
      var reader = new BufferedReader(new FileReader(new File(fileName)));
      //... etc
      project.setProperty("my.result", result));
    ]]> 
</scriptdef>

Then can just go: <myFileCheck myAttribute="./some.file" /> same as you would for a regular ant task.
Also possible to use filesets etc if you want, more details at: http://ant.apache.org/manual/Tasks/scriptdef.html

The nice thing is you can define your tasks inline in your ant script, instead of writing them in Java then having to build and include the class files.

You will need to use Java1.6 (or later), or have apache BSF in your classpath.

Two suggestions come to mind. First, you can access Ant properties from within the javascript. There are examples in the documentation you refer to:

var x = project.getProperty( "my.property" );

can be used in the script to get the value of a property set in the XML, perhaps like this:

<property name="my.property" value="x" />

Second, you might consider using a scriptdef , which will allow you to define attributes and child elements that you can easily access from the javascript.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM