5

在我的 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>
4

2 回答 2

9

要使用脚本定义 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。

于 2013-06-20T04:02:02.773 回答
2

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

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

可以在脚本中用于获取 XML 中设置的属性的值,可能像这样:

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

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

于 2013-01-10T23:04:31.243 回答