【问题标题】:Conditionally including Flex libraries (SWCs) in mxmlc/compc ant tasks有条件地在 mxmlc/compc ant 任务中包含 Flex 库 (SWC)
【发布时间】:2016-04-14 08:48:09
【问题描述】:

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

我有一个包含如下条件任务的初始化目标:

 <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 大小并不表示已编译了其他自动化库。我希望能够指定一个命令行属性,该属性确定要用于各种类型的构建的模式集。

有没有人对如何实现这一点有任何想法?谢谢!

【问题讨论】:

    标签: apache-flex build-process mxmlc compc


    【解决方案1】:

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

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

    在 if 和 else 分支之间有一些构建逻辑的重复,但如果你用宏定义包装 &lt;mxmlc&gt;,你可以排除其中的一些。

    【讨论】:

    • 这是一个很好的建议。我之前采用了类似的方法,天真地认为 将在 任务中被允许,当然不是这样。我没有考虑将 mxmlc 包装在 中。这可能会起作用,但是,这个脚本中构建了大约 15 个模块,我会多次包装它。我正在寻找一种方法,该方法允许我设置一次包含库,并在 ant 项目中的所有 任务中自动获取它。如果我没有听到任何替代方案,我将不得不尝试一下。谢谢。
    • 我们通过创建一个使用 ant-contrib 的 任务并匹配特定目录中所有 *.mxml 文件的 build-all 目标来解决一些重复问题。 然后调用我们的 build-single 目标,该目标将有条件地包含 QTP 库。
    【解决方案2】:

    mxmlc 任务支持加载configuration files&lt;load-config filename="path/to/flex-config.xml" /&gt;。因此,通过结合 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 配置和&lt;load-config ... /&gt; 全部。

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

    <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>
    

    【讨论】:

      猜你喜欢
      • 2010-11-12
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多