2

我一直在努力弄清楚如何根据在命令行上设置的属性有条件地将 Flex 库包含在 ant 构建中。我已经尝试了多种方法来完成这项<condition/>任务,但到目前为止还没有让它发挥作用。这是我目前所在的位置。

我有一个 init 目标,其中包括这样的条件任务:

 <condition property="automation.libs" value="automation.qtp">
  <equals arg1="${automation}" arg2="qtp" casesensitive="false" trim="true"/>
 </condition>

此任务的目的是设置一个属性,该属性确定在 mxmlc 或 compc 任务上声明隐式文件集时要使用的模式集的名称。上面引用的模式集定义为:

 <patternset id="automation.qtp">
  <include name="automation*.swc"/>
  <include name="qtp.swc"/>
 </patternset>

然后 mxmlc 或 compc 任务引用命名的模式集,如下所示:

<compc>
 <compiler.include-libraries dir="${FLEX_HOME}/frameworks/libs" append="true">
  <patternset refid="${automation.libs}"/>
 </compiler.include-libraries>
</compc>

这似乎不起作用。至少 SWC 大小并不表示已编译了其他自动化库。我希望能够指定一个命令行属性,该属性确定要用于各种类型的构建的模式集。

有没有人对如何做到这一点有任何想法?谢谢!

4

2 回答 2

2

如果您无法<patternset>正常工作,您可能需要查看ant-contrib 提供的任务<if> <then><else>我们最终做了这样的事情:

<target name = "build">
    <if>
        <equals arg1="automation.qtp" arg2="true"/>
        <then>
            <!--
               - Build with QTP support.
               -->
        </then>
        <else>
            <!--
               - Build without QTP support.
               -->
        </else>
    </if>
</target>

<mxmlc>if 和 else 分支之间有一些构建逻辑的重复,但如果你使用 macrodef包装,你可以将其中的一些因素排除在外。

于 2010-01-12T23:27:17.833 回答
0

mxmlc 任务支持加载配置文件 <load-config filename="path/to/flex-config.xml" />。因此,通过结合echoxml任务和 if-then-else 即时生成配置 xml。

<echoxml file="path/to/flex-config.xml">
    <flex-config>
        <compiler>
            <library-path append="true">
                <path-element>${lib.qtp}</path-element>
            </library-path>
        </compiler>
    </flex-config>
</echoxml>

如果您的需求更复杂,您甚至可以生成多个 xml 配置以及<load-config ... />它们全部。

就个人而言,我发现使用 Ant 的条件或 if-then-else 编写任何逻辑都非常简洁和丑陋,XML 不是一种用于编程的漂亮语言。幸运的是,可以使用更灵活的方法 - 在调用 mxmlc 之前编写一个脚本来生成配置 xml。例如,将脚本任务与您最喜欢的脚本语言一起使用

<script language="javascript">
    <![CDATA[
        // Create your XML dynamically here.
        // Write that XML to an external file.
        // Later, feed that file to mxmlc using `<load-config ... />`.
    ]]>
</script>
于 2016-04-14T00:48:09.710 回答