我正在使用ant构建我的web应用程序。我的ant脚本中有一个目标,它大约需要8分钟才能编译。由于mxmlc
从零开始编译所有内容,并且每次都加载JVM,因此需要花费大量时间。是否有优化此任务的方法?
我使用的是Flex SDK 3.0。这是我的蚂蚁目标:
<target name="compile.organic.flash" depends="setup">
<property name="WelcomeBack.swf" value="${www.dir}/swf/as3/apps/welcome/WelcomeBack.swf" />
<mxmlc file="${AS3.classpath}/com/organic/app/fthb/welcome/src/WelcomeBack.as"
output="${WelcomeBack.swf}"
incremental="${mxmlc.inc}"
default-frame-rate="30"
accessible="true"
default-background-color="${swf.backgrond.color}"
allow-source-path-overlap="true"
compiler.strict="true">
<default-size width="940" height="528" />
<source-path path-element="${Welcome.path}"/>
<source-path path-element="${AS3.classpath}"/>
</mxmlc>
<property name="Welcome.swf" value="${www.dir}/swf/as3/apps/welcome/Welcome.swf" />
<mxmlc file="${AS3.classpath}/com/organic/app/fthb/welcome/src/Welcome.as"
output="${Welcome.swf}"
incremental="${mxmlc.inc}"
default-frame-rate="30"
accessible="true"
default-background-color="${swf.backgrond.color}"
allow-source-path-overlap="true"
compiler.strict="true">
<default-size width="940" height="528" />
<source-path path-element="${Welcome.path}"/>
<source-path path-element="${AS3.classpath}"/>
<compiler.include-libraries dir="${AS3.component}/" >
</compiler.include-libraries>
</mxmlc>
<property name="App.swf" value="${www.dir}/swf/as3/apps/App-${svnVersion}.swf" />
<mxmlc file="${AS3.classpath}/com/organic/app/fthb/App.as"
output="${App.swf}"
incremental="${mxmlc.inc}"
default-frame-rate="30"
default-background-color="${swf.backgrond.color}"
compiler.strict="true">
<default-size width="300" height="300" />
<source-path path-element="${AS3.classpath}"/>
<compiler.include-libraries dir="${AS3.component}/" >
</compiler.include-libraries>
</mxmlc>
<property name="LSOApp.swf" value="${www.dir}/swf/as3/apps/LSOApp-${svnVersion}.swf" />
<mxmlc file="${AS3.classpath}/com/organic/boa/fthb/LSOApp.as"
output="${LSOApp.swf}"
incremental="${mxmlc.inc}"
default-frame-rate="30"
default-background-color="${swf.backgrond.color}"
compiler.strict="true">
<default-size width="300" height="300" />
<source-path path-element="${AS3.classpath}"/>
<compiler.include-libraries dir="${AS3.component}/" >
</compiler.include-libraries>
</mxmlc>
<property name="CheckRates.swf" value="${www.dir}/swf/as3/apps/CheckRates-${svnVersion}.swf" />
<mxmlc file="${CheckRates.path}/CheckRates.as"
output="${CheckRates.swf}"
incremental="${mxmlc.inc}"
default-frame-rate="40"
accessible="true"
default-background-color="${swf.backgrond.color}"
compiler.strict="true" compiler.allow-source-path-overlap="true" >
<default-size width="940" height="528" />
<compiler.source-path path-element="${AS3.classpath}"/>
<compiler.source-path path-element="${CheckRates.path}"/>
<!-- <source-path path-element="${AS3.classpath}"/> -->
<compiler.include-libraries dir="${AS3.classpath}">
<include name="fl/fl.swc" />
</compiler.include-libraries>
</mxmlc>
<copy file="${AS3.classpath}/com/organic/app/fthb/checkRates/js/config/check_rates_config.js" tofile="${www.dir}/swf/as3/apps/config/check_rates_config.js"/>
<property name="PointsCalculator.swf" value="${www.dir}/swf/as3/apps/PointsCalculator-${svnVersion}.swf" />
<property name="flash.apps.build.dir" value="${www.dir}/swf/as3/apps" />
<compile-flash basename="PointsCalculator" srcdir="${flash.apps.src.dir}/pointsCalculator">
</compile-flash>
<copy todir="${flash.apps.build.dir}/config">
<fileset dir="${flash.apps.src.dir}/pointsCalculator/config" includes="*.js"/>
</copy>
<copy todir="${build.dir}/www/css">
<fileset dir="${flash.apps.src.dir}/pointsCalculator/css" includes="*.css"/>
</copy>
<copy todir="${build.dir}/www/swf/as3/apps/welcome/assets/swfs">
<fileset dir="${flash.apps.src.dir}/welcome/assets/swfs" includes="*.swf"/>
</copy>
<copy file="${videoplayer.dir}/videoplayer.swf" tofile="${www.dir}/swf/as3/apps/videoplayer.swf" />
</target>
使用fcsh。从该链接的第一段
fcsh(Flex Compiler Shell)实用程序提供了一个Shell环境用于编译Flex应用程序、模块和组件图书馆。它的工作方式与mxmlc和compc命令行非常相似编译器,但它的编译速度比mxmlc和compc快命令行编译器。其中一个原因是,通过将所有东西都放在内存,fcsh消除了启动JVM和加载的开销编译器类。另一个原因是汇编结果(例如,类型信息)可以保存在存储器中以备后续使用汇编。
我们发现导致编译器速度减慢的主要原因是链接资产。我们制作了一个库项目swf,它只用于除字体之外的资产(图像、swf等),而且效果不错。
距离maven不到2分钟,我们就有一个庞大的项目大楼。