翻译Adobe Livedoc之Using Flex Ant Tasks

Using the mxmlc task

你可以使用mxmlc任务来编译Flex的应用程序(Application), 各种模块(modules),以及样式表(CSS).  mxmlc任务支持Flex命令mxmlc的多数编译参数,包括aliases. 参考Using mxmlc, the application compiler获取更多关于使用mxmlc命令的信息。

Required attributes

mxmlc任务需要一个指定了要编译MXMl文件的file属性。在命令行模式下mxmlc命令并没有和mxmlc任务的file属性等效的参数,因为命令行下要编译的的文件是默认参数。(例如:cmd模式,mxmlc c:/myfiles/app.mxml;或是mxmlc -option arg1 arg2 arg3 –target_file.mxml)

Unsupported options

mxmlc任务不支持help和version编译参数:

Example

在下面的例子中mxmlc任务显式地定义了source-path和library-path参数,并且也添加了incremental和keep-generated-actionscript参数。该例还指定了输出目录output。例中定义了main和clean俩个任务,main任务用于将Main.mxml文件编译成swf文件,clean用于删除之前输出目录。

<?xml version="1.0" encoding="utf-8"?>
<!-- myMXMLCBuild.xml -->
<project name="My App Builder" basedir=".">
    <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">
        <mxmlc
            file="${APP_ROOT}/Main.mxml"
            output="${DEPLOY_DIR}/Main.swf"
            actionscript-file-encoding="UTF-8"
            keep-generated-actionscript="true"
            incremental="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="clean">
        <delete dir="${APP_ROOT}/generated"/>
        <delete>
            <fileset dir="${DEPLOY_DIR}" includes="Main.swf"/>
        </delete>
    </target>
</project>

Using the compc task

我们可以使用compc任务将组件编译成swc文件。compc支持Flex命令compc的多数编译参数,包括aliases. 参考Using compc,the component compiler获取更多关于使用mxmlc命令的信息。

Required attributes

compc任务的唯一一个必要属性就是output属性,output指定了编译生成的swc文件的名称。

Special attributes

include-classes属性可以用一系列的以空格分开的类名作为参数值。例如

<compc include-classes="custom.MyPanel custom.MyButton" ... >
    ...
</compc>

include-resource-bundles属性,我们不能给该属性的某一个入口指定一系列以逗号或空格分开的值作为参数。相反,我们需要为每个所需引入的resource bundle单独嵌套一个include-resource-bundles标签。

<compc output="${swf.output}/compc_rb.swc" locale="en_US">
    <include-resource-bundles bundle="ErrorLog"/>
    <include-resource-bundles bundle="LabelResource"/>
    <sp path-element="locale/{locale}" />
</compc>

Unsupported options

compc任务不支持help和version参数。

Example

下面的例子中compc任务将编译生成swc文件,其中包括2个自定义组件以及一些资源文件。组件是通过include-classes属性来添加的,源文件在components子目录中。资源文件,包括4个图片和一个css文件通过include-file元素添加到swc中。例中定义了main和 clean俩个targets,main用于编译生成MyComps.swc文件, 而clean用于删除main任务所输出的文件。

<?xml version="1.0" encoding="utf-8"?>
<project name="My Component Builder" basedir=".">
    <taskdef resource="flexTasks.tasks" classpath="${basedir}/flexTasks/lib/flexTasks.jar" />
    <property name="FLEX_HOME" value="C:/flex/sdk"/>
    <property name="DEPLOY_DIR" value="c:/jrun4/servers/default/default-war"/>
    <property name="COMPONENT_ROOT" value="components"/>
    <target name="main">
        <compc
            output="${DEPLOY_DIR}/MyComps.swc"
            include-classes="custom.MyButton custom.MyLabel">
            <source-path path-element="${basedir}/components"/>
            <include-file name="f1-1.jpg" path="assets/images/f1-1.jpg"/>
            <include-file name="f1-2.jpg" path="assets/images/f1-2.jpg"/>
            <include-file name="f1-3.jpg" path="assets/images/f1-3.jpg"/>
            <include-file name="f1-4.jpg" path="assets/images/f1-4.jpg"/>
            <include-file name="main.css" path="assets/css/main.css"/>
        </compc>
    </target>
    <target name="clean">
        <delete>
            <fileset dir="${DEPLOY_DIR}" includes="MyComps.swc"/>
        </delete>
    </target>
</project>

Using the html-wrapper task

html-wrapper任务生成我们部署Flex applications所需的文件。HTML wrapper由<object>和<embed>标签组成,<object>和<embed>标签会把swf文件嵌在HTML页面中。

html-wrapper任务生成index.html和AC_OETags.js文件。如果你允许linking support,则html-wrapper任务还会输出deep linking文件, 如historyFrame.html, history.css和history.js等;如果你允许express installation,则html-wrapper任务会生成playerProductInsta.swf文件。

一般来说,我们需要把上述文件和Flex程序一起部署到web服务器上。用户请求的就是嵌入了swf文件的HTML wrapper。我们也可以在Ant编译之后自定义这些支持文件。参考Creating a Wrapper获取更多HTML wrapper的信息。

About the templates

使用html-wrapper任务我们可以生成6种类型的HTML wrapper模板。

1. Client-side detection only — 提供探测客户端player版本的脚本,在版本过低时返回可以更换的内容。

2. Client-side detection with history — 除了Client-side detection之外,还添加了deep linking suppor。

3. Express installation — 提供支持Express Install功能的脚本。

4. Express installation with history — 提供支持Express Install和deep linking的脚本。

5. No player detection — 提供最基本的wrapper。

6. No player detection with history — 提供仅支持deep linking的wrapper

Supported attributes

html-wrapper任务的属性与<object>和<embed>标签的某些属性类似,另外它还支持output和templenate属性,其中output用于指定输出目录,template用于指定wrapper的类型。参考About the object and embed tags, 获取<object>和<embed>标签属性的完整列表。

下表描述了html-wrapper任务所支持的属性

参考 http://livedocs.adobe.com/flex/3/html/help.html?content=anttasks_1.html

Required attributes

html-wrapper任务需要指定swf属性. 另外如果你只指定了swf属性, 默认的wrapper会有以下默认的设置:

height="400"
width="400"
template="express-installation"
bgcolor="white"
history="false"
title="Flex Application"

注意要使用包含扩展名的文件名来给swf属性赋值,html-wrapper会自动在swf属性值的后面添加.swf后缀。例如

swf="Main"

不要使用

swf="Main.swf"

Unsupported options

html-wrapper任务并不能设置<object>和<embed>标签的所有参数,这其中不支持的参数包括quality, allowScriptAccess, classid, pluginspage和type等.

Example

下面的例子包括wrapper和clean俩个targets, wrapper 生成支持deep linking和player detection的HTML wrapper,clean用于删除wrapper生成的所有文件。

<?xml version="1.0" encoding="utf-8"?>
<!-- myWrapperBuild.xml -->
<project name="My Wrapper Builder" basedir=".">
    <taskdef resource="flexTasks.tasks" classpath="${basedir}/lib/flexTasks.jar"/>
    <property name="FLEX_HOME" value="C:/flex3/sdk"/>
    <property name="APP_ROOT" value="apps"/>
    <target name="wrapper">
        <html-wrapper
            title="Welcome to My Flex App"
            file="index.html"
            height="300"
            width="400"
            bgcolor="red"
            application="app"
            swf="Main"
            version-major="9"
            version-minor="0"
            version-revision="0"
            history="true"
            template="express-installation"
            output="${APP_ROOT}"/>
    </target>
    <target name="clean">
        <delete>
            <!-- Deletes playerProductInstall.swf -->
            <fileset dir="${APP_ROOT}"
                includes="playerProductInstall.swf"
                defaultexcludes="false"/>
            <!-- Deletes index.html and historyFrame.html -->
            <fileset dir="${APP_ROOT}" includes="*.html" defaultexcludes="false"/>
            <!-- Deletes history.css -->
            <fileset dir="${APP_ROOT}" includes="*.css" defaultexcludes="false"/>
            <!-- Deletes history.js and AC_OETags.js -->
            <fileset dir="${APP_ROOT}" includes="*.js" defaultexcludes="false"/>
        </delete>
    </target>
</project>