将参数传递给ANT javascript任务?

jed*_*ikb 5 javascript ant

在我的ANT脚本中,我有时会用Rhino编写运行javascript的任务.

但是,我不知道如何将参数传递给这些任务.有任何想法吗?

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

<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>
Run Code Online (Sandbox Code Playgroud)

Tim*_*Tim 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>
Run Code Online (Sandbox Code Playgroud)

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

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

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


mar*_*ton 2

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

var x = project.getProperty( "my.property" );
Run Code Online (Sandbox Code Playgroud)

可以在脚本中使用来获取 XML 中设置的属性值,可能如下所示:

<property name="my.property" value="x" />
Run Code Online (Sandbox Code Playgroud)

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