我们在前面的《基于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>
O comments at "Flex Ant Task增强及与Flex-Config.xml结合的Flex编译模式"
Comment Now!