Как заставить Flex Builder 3 генерировать две сборки: одна -use-network = true, другая -use-network = false?

Я создаю приложение Flex, которое необходимо запустить в двух различных сценариях развертывания:

Сначала приложение будет размещено в сети. SWF загружает некоторые внешние ресурсы (изображения, текст), поэтому ему требуется доступ к сети, что является флагом сборки Flex Builder 3 по умолчанию "-use-network=true". Мне не нужно делать ничего особенного; это просто работает.

Во-вторых, приложение будет записано на компакт-диск с включенным автозапуском для запуска index.html, на котором размещен SWF. SWF по-прежнему должен иметь возможность загружать те же внешние ресурсы, которые находятся на компакт-диске во вложенной папке. Поскольку эти файлы находятся на компакт-диске, они считаются локальными, поэтому для обеспечения безопасности Flash требуется, чтобы SWF был создан с использованием флага "-use-network=false". Я добавляю это в текстовое поле «Дополнительные аргументы компилятора» в разделе «Компилятор Flex» в диалоговом окне «Свойства» проекта Flex.

Все это работает должным образом, но утомительно вручную изменять настройки проекта Flex Builder, чтобы добавить или удалить этот флаг, в зависимости от обстоятельств.

В идеале я хотел бы просто собрать проект один раз и иметь несколько выходных папок: одну для сценария развертывания сети, а другую для < em> локальный сценарий развертывания.

Как лучше всего это сделать? Лучше ли перейти на сборку Ant или есть более простой способ? Если конфигурация сборки Ant является правильной, есть ли у вас пример, чтобы поделиться такими множественными конфигурациями сборки?

Спасибо за вашу помощь!


person Chris W. Rea    schedule 31.08.2009    source источник


Ответы (1)


Как только вы разберетесь со сборкой Ant, она значительно упростит вам жизнь. Создание файла с несколькими сборками ничем не отличается от одного файла сборки, вы просто добавите дополнительную задачу внутри своей сборки с соответствующими настройками (вы также можете использовать цикл в ant, но это добавляет сложности)

Итак, расширяя пример 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>

В качестве примечания: если вы собираетесь запускать сборку Ant в eclipse / Flash Builder, вы также можете увеличьте объем памяти сейчас.

person Joel Hooks    schedule 31.08.2009