我的机器内存1G,如果使用Eclipse Flex插件编译程序,用不了多久系统内存就会耗尽,机器会变得极其缓慢。使用Flex Builder 2.01似乎情况要好一点,但是觉得Eclipse似乎更加好用一点,比如Ctrl + Alt + LEFT可以将一块代码向左移……Flex Builder好像没有类似的快捷键,虽然有类似的命令。另外还要进行ColdFusion,js开发,如果总是将IDE换来换去多麻烦啊。
在网上浏览时看到使用ant来编译可以提高速度、减少内存占有率。当然也可以直接使用命令行mxmlc等命令来编译,但是不如使用ant方便——ant其实也是使用mxmlc命令来编译。
Adobe labs提供了ant tasks工具包并有一些使用方法,是英文并且不怎么详细。有几个中文Blog文章有写相关,但是大多是针对旧版本的Flex SDK,我现在使用的SDK是2.0正式版,较之那些教程上的版本新,导致那些教程上的例子不能执行。
以Eclipse3.2.1为例,一步步来吧。
- 从Adobe labs上下载最新的ant tasks工具包,地址:http://labs.adobe.com/wiki/index.php/Flex_Ant_Tasks。
- 解压缩。
- 将flexTasks.jar拷贝到eclipse的ant lib根目录下面,ant lib目录一般在eclipse根目录下,如\plugins\org.apache.ant_ant版本号\lib。
- 在项目根目录中新建flexTasks文件,拷入ant tasks中的几个文件加:lib和resources。
- 在项目根目录中建立build.xml。build.xml文件内容可参考:http://nstar.javaeye.com/blog/129653,这里也有一个示例,ant的命令可以到 ant的官方网站去查,今天在我的火狐2.0中地址栏输入ant move,居然FF自动进入了ant官方网站并且显示task move :)是不是FF的开发人员也用ant,为了方便查找而设置的,因为输入其他关键字一般进入的Google:
<? xml version="1.0" encoding="utf-8" ?>
< project name ="Flex Ant Builder Sample Project" basedir ="." >
< taskdef resource ="flexTasks.tasks" classpath ="${basedir}/flexTasks/lib/flexTasks.jar" />
< property name ="FLEX_HOME" value ="D:/eclipse/Adobe/Flex Builder 2 Plug-in/Flex SDK 2" />
< property name ="APP_ROOT" value ="${basedir}" />
< property name ="DEPLOY_DIR" value ="bin" />
<!-- compiled mxml/as file Name -->
< property name ="fileName" value ="ActorLines" />
<!-- compiled mxml/as file ext -->
< property name ="fileExt" value ="mxml" />
<!-- third party swc -->
<!-- <property name="THIRD_PARTY" value="D:/work/thirdparty/FlexLib" /> -->
<!-- modular application's main application fileName -->
< property name ="mainApp" value ="" />
<!-- output package direction,end with / -->
< property name ="package" value ="" />
< property name ="FLASHPLAYER" value ="D:/eclipse/Adobe/Flex Builder 2 Plug-in/Player/debug/SAFlashPlayer.exe" />
< property name ="IE" value ="C:\Program Files\Internet Explorer\iexplore.exe" />
<!-- compile a mxml/as file -->
< target name ="compile" depends ="cleanCompile" >
< mxmlc
file ="${APP_ROOT}/${package}${fileName}.${fileExt}"
output ="${DEPLOY_DIR}/${package}${fileName}.swf"
actionscript-file-encoding ="UTF-8"
keep-generated-actionscript ="false"
warnings ="false"
incremental ="true"
>
<!-- ***** source file path ******* -->
< compiler .source-path path-element ="${basedir}" />
<!-- 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 >
<!-- ***** thirdparth swc ***** -->
<!-- <compiler.include-libraries dir="${THIRD_PARTY}" append="true">
<include name="DistortionEffects.swc" />
</compiler.include-libraries> -->
<!-- Set size of output SWF file.
<default-size width="500" height="600" />
-->
</ mxmlc >
< delete >
<!-- Deletes cache file -->
< fileset dir ="${APP_ROOT}/${package}" includes ="${fileName}*.cache" defaultexcludes ="false" />
</ delete >
</ target >
<!-- compile mxml file and Generate a Link Report for the embed module -->
< target name ="CompileAndGenerateLinkReport" >
< mxmlc
file ="${APP_ROOT}/${package}${fileName}.${fileExt}"
link-report ="${APP_ROOT}/${package}${fileName}_LinkReport.xml"
output ="${DEPLOY_DIR}/${package}${fileName}.swf"
actionscript-file-encoding ="UTF-8"
keep-generated-actionscript ="false"
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" />
< source-path path-element ="${APP_ROOT}" />
<!-- 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 >
< delete >
<!-- Deletes cache file -->
< fileset dir ="${APP_ROOT}/${package}" includes ="${fileName}*.cache" defaultexcludes ="false" />
</ delete >
</ target >
<!-- compile Modular mxml file with mainApp's Link Report -->
< target name ="CompileModuleWithLinkReport" >
< mxmlc
file ="${APP_ROOT}/${package}${fileName}.${fileExt}"
load-externs ="${APP_ROOT}/${mainApp}_LinkReport.xml"
output ="${DEPLOY_DIR}/${package}${fileName}.swf"
actionscript-file-encoding ="UTF-8"
keep-generated-actionscript ="false"
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 >
< delete >
<!-- Deletes cache file -->
< fileset dir ="${APP_ROOT}/${package}" includes ="${fileName}*.cache" defaultexcludes ="false" />
</ delete >
</ target >
<!-- wrapper a swf with html express-installation template -->
< target name ="wrapper" depends ="cleanWrapper" >
< html-wrapper
title ="Actor's lines in web"
width ="100%"
height ="100%"
application ="flexApp"
swf ="${fileName}"
version-major ="9"
version-minor ="0"
version-revision ="0"
history ="true"
template ="express-installation"
output ="${DEPLOY_DIR}/${package}" />
< move file ="${DEPLOY_DIR}/${package}index.html" tofile ="${DEPLOY_DIR}/${fileName}.html" />
< copy todir ="${DEPLOY_DIR}/assets" >
< fileset dir ="./assets" />
</ copy >
</ target >
<!-- clean preview previous compile file -->
< target name ="cleanCompile" >
< delete dir ="${APP_ROOT}/${package}generated" />
< delete >
< fileset dir ="${DEPLOY_DIR}/${package}" includes ="${fileName}*.swf" />
</ delete >
</ target >
<!-- clean preview previous wrapper file -->
< target name ="cleanWrapper" >
< delete >
<!-- Deletes history.swf -->
< fileset dir ="${DEPLOY_DIR}/${package}" includes ="history.swf" defaultexcludes ="false" />
<!-- Deletes playerProductInstall.swf -->
< fileset dir ="${DEPLOY_DIR}/${package}" includes ="playerProductInstall.swf" defaultexcludes ="false" />
<!-- Deletes ${fileName}.html -->
< fileset dir ="${DEPLOY_DIR}/${package}" includes ="${fileName}*.html" defaultexcludes ="false" />
<!-- Deletes history.htm -->
< fileset dir ="${DEPLOY_DIR}/${package}" includes ="$history.htm" defaultexcludes ="false" />
<!-- Deletes history.js and AC_OETags.js -->
< fileset dir ="${DEPLOY_DIR}/${package}" includes ="*.js" defaultexcludes ="false" />
<!-- Deletes all assets -->
< fileset dir ="${DEPLOY_DIR}/assets" includes ="*.*" />
</ delete >
</ target >
< target name ="run" depends ="compile" description ="Compile and run it." >
< exec executable ="${FLASHPLAYER}" >
< arg value ="${DEPLOY_DIR}/${package}${fileName}.swf" />
</ exec >
</ target >
< target name ="runie" depends ="compile" description ="Compile and run it." >
< exec executable ="${IE}" >
< arg value ="${basedir}\${DEPLOY_DIR}\${package}${fileName}.html" />
</ exec >
</ target >
</ project >
弄完build.xml之后,基本上就完成ant的设置,现在可以享受ant带来的速度与便捷了。
如何使用ant运行任务
- 在命令行里面输入ant targetname;
- 建立cmd文件,里面输入ant targetname,以后就只要双击这个cmd文件。
- 在eclipse中选择build.xml,然后右键选择Run as -> ant bulid,在弹出的对话框中选择Targets,然后选择一个Target,在Build中去掉Build before lunch前面的勾,现在可以Run啦。在Eclipse的控制台里面可以看到信息显示。