3

2 つの異なる展開シナリオで実行する必要がある Flex アプリケーションを構築しています。

まず、アプリケーションは Web 上でホストされます。SWF はいくつかの外部リソース (画像、テキスト) をロードするため、Flex Builder 3 のデフォルトのビルド フラグであるネットワーク アクセスが必要です"-use-network=true"。特別なことをする必要はありません。それだけで機能します。

次に、SWF をホストする index.html を起動するために autorun を有効にしてアプリケーションを CD に書き込みます。SWFは、CD のサブフォルダーにある同じ外部リソースをロードできる必要がありますこれらのファイルは CD 上にあるため、ローカルと見なされます。そのため、Flash セキュリティでは、SWF を のフラグを使用して構築する必要があり"-use-network=false"ます。これを、Flex プロジェクトの [プロパティ] ダイアログの [Flex コンパイラ] の下にある [追加のコンパイラ引数] テキスト ボックスに追加します。

これはすべて期待どおりに機能しますが、場合によっては Flex Builder プロジェクト設定を手動で変更してそのフラグを追加または削除する必要があるのは面倒です。

理想的には、プロジェクトを 1 回だけビルドし、複数の出力フォルダーを作成したいと考えています。1 つはネットワーク展開シナリオ用、もう 1 つはローカル展開シナリオ用です。

それを行う最善の方法は何ですか?Ant ビルドへの移行は進むべき道ですか、それとももっと簡単な方法がありますか? Ant ビルド構成が正しい方法である場合、そのような複数のビルド構成を共有する例はありますか?

ご協力いただきありがとうございます!

4

1 に答える 1

7

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>

ちなみに、Eclipse / Flash BuilderでAntビルドを実行する場合は、ここでメモリを増やした方がよいでしょう。

于 2009-08-31T15:23:23.483 に答える