如何使用Flex Ant Tasks从脚本def获取属性

时间:2011-01-21 17:48:10

标签: flex ant

我有一个正在运行的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>

1 个答案:

答案 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属性是不可变的 - 它们不是变量 - 一旦设置,值就无法更改。