我有一个正在运行的build.xml文件,我正在使用它来完成各种任务,比如构建一个swc等。我想要做的一件事就是解析一个类的版本号并将其附加到swc文件名。< / p>
我使用scriptdef来解析版本号,但我无法解决如何从scriptdef调用之外访问结果。
<target name="output_version">
<loadfile property="version" srcFile="src/Main.as"/>
<script_test str="${version}"/>
<echo>${str}</echo>
</target>
<scriptdef name="script_test" language="javascript">
<attribute name="str"/>
<attribute name="result"/>
<element name="fileset" type="fileset"/>
<element name="path" type="path"/>
<![CDATA[
var txt = attributes.get("str");
var patt = /VERSION:String = "(.+)?"/;
var result = patt.exec(txt);
self.log("Hello from script: " + result[1]);
self.project.setProperty( attributes.get("str"), result[1]);
]]>
</scriptdef>
答案 0 :(得分:3)
看起来你正试图设置str
属性(因为你正在回应它)。
一种选择是在javascript中直接分配给它:
self.project.setProperty( "str", result[1] );
在您发布的代码中
的值attributes.get("str")
将是文件src/Main.as
的内容,这不是一个理想的属性名称。
如果要通过result
属性传递属性名称以将找到的信息保存到scriptdef中,请在脚本中使用:
self.project.setProperty( attributes.get("result"), result[1] );
然后在来电者中,例如:
<script_test str="${version}" result="res" />
<echo>${res}</echo>
请注意,Ant属性是不可变的 - 它们不是变量 - 一旦设置,值就无法更改。