我们在前面的《基于Flex-config.xml的命令行编译》和《Adobe官方Flex Ant Task的使用方法》中分别对Flex Ant Task和Flex-Config.xml的使用进行了详细的说明,今天我们来说说,如何将两者结合到一起。

我们的思路是这样的,使用Flex Ant Task来编译而使用Flex-Config.xml文件来控制编译的参数,每个项目有对应一个Flex-config.xml文件,Flex-config.xml文件中所有的参数路径都是相对项目而言的,另外因为要将所有的编译参数剥离到Flex-config.xml文件中,在Flex-config.xml如果要使用自定义类库,为了避免在Flex-config.xml文件中配置 <library-path>使用绝对路径,所有我们使用token的方式传参数。如:

[xml]
<library-path>
  <path-element>${flexlib}/libs</path-element>
  <path-element>${flexlib}/locale/{locale}</path-element>
  <path-element>${basedir}/libs</path-element>
</library-path>

而${basedir}指向对应的Flex项目的根目录,以上的配置的意思是将我们Flex项目下的libs目录添加到类库路径中。因为Adobe官方的Flex Ant Task不支持增加Token,所有我们这里对官方的Flex Ant Task进行了一些增强,加入了Token支持,可以直接使用如下方法在使用Flex Ant Task编译Flex时传入Token变量:

[xml]
<token name="token变量名" value="变量值"/>

例如,以下增加token变量basedir,值为ant工程的basedir:

[xml]
<token name="basedir" value="${basedir}"/>

这样我们可以灵活的对Flex-config.xml进行修改,并且所有的路径都是相对的,基于token变量的,我们可以在Flex Ant Task中方便的修改类库的位置等。

另外,官方的Flex Ant Task不管编译成功还是失败,Ant任务总是成功的,所有在我们在增强的同时也加入了编译失败throws一个Ant任务失败的增强,相应的我们还增加了一个将编译失败的错误信息重定向到build.err文件中的功能,后续我们会提供一个读取该build.err文件的Eclipse插件,以方便我们打开相应的错误文件(类似FlexBuilder的编译出错在Eclipse problems视图显示的结果)。具体的用法如下:

[xml]
<mxmlc
  file="${APP_ROOT}/${package}${fileName}.${fileExt}"
  output="${DEPLOY_DIR}/${package}${fileName}.swf"
  logError="true"
  failOnError="true"
>

其中logError=”true”表示将编译错误信息重定向到build.err文件中,而failOnError=”true”表示编译失败则Ant任务失败。注意要编译失败则Ant任务失败必须将logError设置为:”true”。

通过以上,我们的Flex Ant Task的build.xml文件中的编译部分变化为如下:

[xml]
<!-- compile a mxml/as file -->
<target name="compile" depends="cleanCompile">
  <mxmlc
    file="${APP_ROOT}/${package}${fileName}.${fileExt}"
    output="${DEPLOY_DIR}/${package}${fileName}.swf"
    logError="true"
    failOnError="true"
  >
    <!-- Get default compiler options. -->
    <load-config filename="${basedir}/flex-config.xml"/>
    <token name="basedir" value="${basedir}"/>
    <token name="flexlib" value="${FLEX_HOME}/frameworks"/>
  </mxmlc>
  <delete>
  <!-- Deletes cache file -->
  <fileset dir="${APP_ROOT}/${package}" includes="${fileName}*.cache" defaultexcludes="false"/>
  </delete>
</target>

立刻下载增强版本FlexAntTask(包括源码)