将参数传递给ANT javascript任务?

时间:2013-01-10 19:48:16

标签: javascript ant

在我的ANT脚本中,我有时会写tasks runnning javascript with Rhino

但是,我对如何将参数传递到这些任务感到茫然。有什么想法吗?

例如......这是一个这样的任务的例子:

<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>

2 个答案:

答案 0 :(得分:8)

要使用脚本定义ant任务,您可以使用scriptdef任务而不是script。使用scriptdef,可以使用预定义的对象来访问任务中的属性和嵌套元素。

这适用于从Ant中访问javascript中的属性:

<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>

然后可以去:<myFileCheck myAttribute="./some.file" />与常规蚂蚁任务相同 如果需要,还可以使用文件集等,更多详细信息请访问:http://ant.apache.org/manual/Tasks/scriptdef.html

好处是你可以在你的ant脚本中内联定义你的任务,而不是用Java编写它们然后必须构建和包含类文件。

您需要使用Java1.6(或更高版本),或在类路径中使用apache BSF。

答案 1 :(得分:2)

我想到了两个建议。首先,您可以从javascript中访问Ant属性。您参考的文档中有一些示例:

var x = project.getProperty( "my.property" );
可以在脚本中使用

来获取XML中属性集的值,可能是这样的:

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

其次,您可以考虑使用scriptdef,这将允许您定义可以从javascript轻松访问的属性和子元素。