在我的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)
要使用脚本来定义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.
我想到了两个建议。首先,您可以从 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 轻松访问的属性和子元素。
| 归档时间: |
|
| 查看次数: |
4339 次 |
| 最近记录: |