http://blog.csdn.net/james999/archive/2009/03/05/3961239.aspx
在现实应用中,如果使用未购买license的(或破解版的)FlexBuidler去编译flash文件,是要付法律责任的,特别是企业开发。所以,你必须利用Flex SDK自己手工编译。
Adobe提供了一个FlexTasks这个Ant扩展来辅助进行编译操作,在我的另一篇博客中简要介绍了如何通过其来build swc文件,详细见:http://blog.csdn.net/james999/archive/2009/01/05/3715018.aspx 。有关Adobe的FlexTasks这个扩展,可以参见:http://livedocs.adobe.com/flex/3/html/help.html?content=anttasks_3.html 。
另外,使用ant来build还有一个好处,是比FlexBuilder本身提供的Merged into code模式编译方式,编译的swf文件要小很多,基本上能够小35%左右,这可不是一个小数目哦。但Ant build没有提供RSL模式,这是也是一个弊端。如果你希望能够实现RSL方式,来缓解客户端的加载数据量,那估计最好是购买正版的Flex Builder。
如果你直接按照参考文档中的<mxmlc>命令来编译mxml应用,如果你的应用中需要引用很多assets,那么很不幸,你将会得到如下之类的异常:
view plaincopy to clipboardprint?
main:
[mxmlc] Loading configuration file D:\IDE\Adobe\Flex Builder 3\sdks\3.0.0\frameworks\flex-config
.xml
[mxmlc] D:\WorkDir\Flex Projects\Walle\primeton.bps.modeler.flow\flex_src\flowdesigner3_362209.c
ache (The system cannot find the file specified)
[mxmlc] D:\WorkDir\Flex Projects\Walle\primeton.bps.modeler.flow\flex_src\com\primeton\flow\diag
ram\editor\figures\ActivityIconFactory.as(16): col: 10: Error: unable to resolve 'assets/images/manu
al_activity.gif' for transcoding
[mxmlc]
[mxmlc] [Embed(source='assets/images/manual_activity.gif')]
[mxmlc]
^
这是因为你的这些assets资源无法被编译器找到。
在Shreyas Purohit的一篇博客中,介绍根本原因,以及可以解决这个问题的一种方式,可参考:
http://sacrosanctblood.blogspot.com/2008/12/flex-solution-to-error-unable-to.html
下面的样例代码,就是根据我的本机的情况,做的修改。大家也可以参考一下。整个思路就是:动态把assets文件,编译成一个swc包,然后在编译flex application的时候动态引用进来。
首先,你需要引入ant-contrib这个ant扩展组件,在http://ant-contrib.sourceforge.net/ 上有介绍及下载。然后添加进你的build.xml中。
我的目录结构如下:
|- project
|--flex_src
|
|-- flowdesigner.mxml
|-- assets
| |-- icons
| |-- images
| |-- css
在build.properties中,声明你的flex文件地址,及src地址:
view plaincopy to clipboardprint?
###### Flex Properties ##############################
# change this path to your flex sdk directory
# Use "/" in your directory path e.g. C:/FlexSDK/3.0.0
FLEX_HOME=D:/IDE/Adobe/Flex Builder 3/sdks/3.0.0
###### Project Properties ###########################
src-dir=${basedir}/flex_src
下面是build.xml
view plaincopy to clipboardprint?
<project name="Ant build SWC sample" basedir="." default="main">
<property file="build.properties" />
<taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" />
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="D:/ant171/lib/ant-contrib-version.jar"/>
</classpath>
</taskdef>
<target name="buildAssertsSWC">
<fileset id="assets.flex" dir="${src-dir-assets}" includes="**/*.gif,**/*.jpg,**/*.png,**/*.css,**/*.swf,**/*.TTF,**/*.jpeg,**/*.xml" />
<pathconvert pathsep=" " property="assets.flex.output" refid="assets.flex" dirsep="/">
<map from="${src-dir-assets}/" to=""/>
</pathconvert>
<echo message="...Resources being considered..."/>
<var name="filelist" value=""/>
<var name="prefixfilelist" value="-include-file"/>
<for list="${assets.flex.output}" delimiter=" " param="asset">
<sequential>
<echo>Asset: @{asset}</echo>
<var name="filelist_tmp" value="${filelist}"/>
<var name="filelist" unset="true"/>
<var name="filelist" value="${filelist_tmp} ${prefixfilelist} @{asset} '${src-dir-assets}/@{asset}'"/>
</sequential>
</for>
<echo message="-output '${basedir}/flex_libs/assets.swc' ${filelist}"/>
<exec executable="${FLEX_HOME}/bin/compc.exe" failonerror="true">
<arg line="-output '${basedir}/flex_libs/assets.swc' ${filelist}"/>
</exec>
</target>
<target name="main" depends="buildAssertsSWC">
<path id="src.files">
<fileset dir="${src-dir}">
<include name="**/**"/>
</fileset>
</path>
<mxmlc file="${APP_ROOT}/flowdesigner.mxml"
output="build/flowdesigner.swf"
actionscript-file-encoding="UTF-8"
keep-generated-actionscript="true"
incremental="true"
>
<load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/>
<source-path path-element="${FLEX_HOME}/frameworks"/>
<compiler.library-path dir="${FLEX_HOME}/frameworks" append="true">
<include name="libs" />
</compiler.library-path>
<compiler.library-path dir="${basedir}" append="true">
<include name="flex_libs" />
</compiler.library-path>
<compiler.source-path path-element="${src-dir}"/>
</mxmlc>
</target>
</project>
然后运行ant命令,即可。
分享到:
相关推荐
pdf格式的flex的mxml语法,适合想学习flex的新手
NULL 博文链接:https://liujianshiwo.iteye.com/blog/624512
MXML语法.MXML flexview actionscript
flex -MXML语法,介绍flex 的 mxml的基本语法构成,适合一般学习者使用
flex入门教程,主要介绍了mxml和ActionScript的简单应用,适合初学者,高手就没必要下载啦
实现了计算器的加减乘除开根号和幂操作。没有去实现AS和MXML分离。 想研究的同学下载吧。。将文件解压后导入到FB 3.0 中
About MXML programming files and Flex usage.
flex使用容器和MXML样式.pdf格式的 英文的哦
一个上课用的ppt文档,更容易让你对mxml更为的了解。。
初学者一般会遇到这样的问题,flex项目编译时找不到html文件,这是因为mxml没有自动生成.html
如果你的flex插件出现mxml无法打开的问题,请下载此文件,同时参考:http://www.tekool.net/blog/2008/06/28/flex-builder-3-plugin-dont-work-with-eclipse-34/或者:...
Classes Class Description OLAPAttribute The OLAPAttribute class represents a single attribute of an OLAPDimension. OLAPAxisPosition The OLAPAxisPosition class represents a position along the axis ...
编译MXML详解及代码详解[定义].pdf
有了 Flex,程序员可以使用 Action Script 和 MXML 编程语言快速开发富网络应用。 Flex 对开发者更具吸引力,而 Flash 更多的是吸引设计人员。 Flex 原理 当你编译一个 Flash 程序时,Flash 开发环境把所有的可视化...
mxml 适合用于嵌入式 xml 解析的轻量级的工具,在下载包的 mipsel 有编译好的.a 文件
关于Flex4不生成mxml对应的html文件的解决方法,有时候mxml文件编译时没有生成对应的swf文件和html文件。
flex+flash+mxml = 绚丽相册实现 简单精美欢迎下载
MXML语言和ActionScript语言都是需要编译后才能运行的。Flash Builder 4开发环境中集成了两者的编译器,用户只需选择相应的编译运行命令。 本书在介绍第一个Flex程序“Hello World”程序时,简单地介绍了了如何编译...
第1章 使用Flex的理由 1.1 Flex的含义 1.2 RIA的含义 1.3 受欢迎的Flex 1.3.1 揭秘Flash和Flex 1.3.2 用户喜爱Flex的十大理由 1.4 本章小结 第2章 Flex3生态系统 2.1 Flex历史简介 2.2...
Flex Chart+WebService由于发布时没有注意,忘了把MXML的源码打包。webservice采用的是Myeclipse自带的XFIRES,可自行添加。