3

我正在构建一个需要在两种不同的部署场景下运行的 Flex 应用程序:

首先,应用程序将托管在网络上。SWF 加载一些外部资源(图像、文本),因此需要网络访问,这是 Flex Builder 3 默认构建标志"-use-network=true"。我不需要做任何特别的事情;它只是工作。

其次,将应用程序写入 CD 并启用自动运行以启动托管 SWF 的 index.html。SWF仍然需要能够加载相同的外部资源,这些外部资源位于 CD 上的子文件夹中。由于这些文件位于 CD 上,因此它们被视为本地文件,因此 Flash 安全性要求使用"-use-network=false". 我将它添加到 Flex 项目的“属性”对话框中“Flex 编译器”下的“附加编译器参数”文本框中。

这一切都按预期工作,但必须手动修改 Flex Builder 项目设置以根据具体情况添加或删除该标志是很乏味的。

理想情况下,我想只构建一次项目并拥有多个输出文件夹:一个用于网络部署场景,另一个用于本地部署场景。

最好的方法是什么?迁移到 Ant 构建是要走的路,还是有更简单的方法?如果 Ant 构建配置是正确的方法,您是否有共享此类多个构建配置的示例?

谢谢你的帮助!

4

1 回答 1

7

一旦您了解了 Ant 构建,它将使您的生活变得更加轻松。构建多个构建文件与单个构建文件没有什么不同,您只需使用适当的设置在构建中添加一个附加任务(您也可以在 ant 中使用循环,但这会增加复杂性)

因此,从 docs 扩展Flex Ant Tasks 示例,这样的东西应该可以工作(未经测试):

<?xml version="1.0" encoding="utf-8"?>
<!-- myMXMLCBuild.xml -->
<project name="My App Builder" basedir="." default="main">
    <taskdef resource="flexTasks.tasks" classpath="${basedir}/flexTasks/lib/flexTasks.jar" />
    <property name="FLEX_HOME" value="C:/flex/sdk"/>
    <property name="APP_ROOT" value="apps"/>
    <property name="DEPLOY_DIR" value="c:/jrun4/servers/default/default-war"/>
    <target name="main" depends="clean, compile1, compile2">
    </target>
    <target name="compile1">
        <mxmlc 
            file="${APP_ROOT}/Main.mxml" 
            output="${DEPLOY_DIR}/Main.swf"
            actionscript-file-encoding="UTF-8"
            keep-generated-actionscript="true"
            incremental="true"
            use-network="true"
        >
            <!-- Get default compiler options. -->
            <load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/>

            <!-- List of path elements that form the roots of ActionScript
            class hierarchies. -->
            <source-path path-element="${FLEX_HOME}/frameworks"/>

            <!-- List of SWC files or directories that contain SWC files. -->
            <compiler.library-path dir="${FLEX_HOME}/frameworks" append="true">
                <include name="libs" />
                <include name="../bundles/{locale}" />
            </compiler.library-path>

            <!-- Set size of output SWF file. -->
            <default-size width="500" height="600" />
        </mxmlc>
    </target>
    <target name="compile2">
        <mxmlc 
            file="${APP_ROOT}/Main.mxml" 
            output="${CD_DEPLOY_DIR}/Main.swf"
            actionscript-file-encoding="UTF-8"
            keep-generated-actionscript="true"
            incremental="true"
            use-network="false"
        >
            <!-- Get default compiler options. -->
            <load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/>

            <!-- List of path elements that form the roots of ActionScript
            class hierarchies. -->
            <source-path path-element="${FLEX_HOME}/frameworks"/>

            <!-- List of SWC files or directories that contain SWC files. -->
            <compiler.library-path dir="${FLEX_HOME}/frameworks" append="true">
                <include name="libs" />
                <include name="../bundles/{locale}" />
            </compiler.library-path>

            <!-- Set size of output SWF file. -->
            <default-size width="500" height="600" />
        </mxmlc>
    </target>
    <target name="clean">
        <delete dir="${APP_ROOT}/generated"/>
        <delete>
            <fileset dir="${DEPLOY_DIR}" includes="Main.swf"/>
        </delete>
    </target>
</project>

附带说明一下,如果您要在 eclipse/Flash Builder 中运行 Ant 构建,您不妨现在增加内存

于 2009-08-31T15:23:23.483 回答