`
nlslzf
  • 浏览: 1045264 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用ant编译flex的mxml application

阅读更多
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命令,即可。
分享到:
评论
3 楼 gaojunli0316 2010-11-08  
谢谢!在网上查了资料研究了一下!问题基本解决!
2 楼 nlslzf 2010-11-08  
你是不是要在后台做静默的编译发布啊?
不管你想怎么弄,建议你先自己弄一个ant配好,然后自己编译一个helloworld的工程出来。只要你搞懂这个,后面的就好弄了
1 楼 gaojunli0316 2010-11-04  
您好,最近在做的项目要用到Ant,我没用过这个,是个菜鸟,所以有些地方想请教您!
我们的项目Flex端和java端是分开的,Flex引用了java工程,使用java工程中的bean,然后在Flex端去调用java工程中的接口!这两个工程都用svn管理。
我要在新建的java工程中用build文件去配置它们,我的build.xml文件该怎么写呢?已经为此折腾了很长时间,能不能帮忙指导一下!不胜感激!

相关推荐

    使用ant编译生成flex的swc文件

    本文将深入探讨如何使用Ant工具来编译生成Flex的SWC文件,以此解决传统方式带来的繁琐和不便。 首先,让我们了解基本概念。`Ant`是一款由Apache软件基金会开发的Java构建工具,它基于XML编写构建脚本,可以跨平台...

    利用Ant自动编译Flex程序

    本文将深入探讨如何利用Apache Ant来自动编译Flex程序。Apache Ant是一种基于Java的构建工具,它允许开发者通过XML配置文件来定义任务,实现软件项目的构建、部署等自动化操作。Flex是一种用于创建富互联网应用程序...

    as3 flex mxml调用.as文件例子

    在本文中,我们将深入探讨如何在ActionScript 3 (AS3) 和 Flex 框架中使用MXML来调用`.as`文件中的类。Flex是Adobe开发的一个开源框架,用于构建富互联网应用程序(RIA),它结合了MXML和AS3,提供了声明式和编程式...

    使用Flex Ant Tasks编译工程文件

    本话题聚焦于“使用Flex Ant Tasks编译工程文件”,这是一个关于如何使用Apache Ant结合Flex工具集来构建Flex应用程序的过程。Apache Ant是一个Java库和命令行工具,其任务是驱动构建过程,而Flex Tasks则是专门为...

    flex中的mxml语法

    pdf格式的flex的mxml语法,适合想学习flex的新手

    flex编译

    总之,Flex编译涉及到了ActionScript和MXML的语法理解、Flex SDK的使用、Ant工具的掌握以及构建脚本的编写。通过有效的自动化流程,开发者能够高效地管理和维护Flex项目,提高开发效率,确保代码质量。在实际工作中...

    MXML语法关于flexview

    在FlexView中,MXML通常结合ActionScript一起使用,提供了强大的功能来创建丰富的互联网应用程序(RIA)。 ### MXML命名规范 1. **大小写敏感**:MXML区分大小写,包括文件名、类名以及属性名。 2. **文件扩展名**...

    Flash(Flex)反编译及修改

    Flash是一种矢量图形和多媒体播放器,而Flex则是一种基于ActionScript和MXML的框架,用于构建富互联网应用(RIA)。在某些情况下,我们可能需要对已经编译的SWF文件进行反编译,以获取源代码或进行修改。以下将详细...

    flex入门教程,主要介绍了mxml和ActionScript的简单应用

    3. 编译:使用Flex SDK将源代码编译为SWF文件,这是Flex应用程序的最终运行形式。 4. 部署:将SWF文件嵌入到HTML页面中,或者作为独立的AIR应用程序发布。 六、Flex的应用场景 Flex广泛应用于数据可视化、企业级...

    编译MXML详解及代码详解[定义].pdf

    编译MXML详解及代码详解[定义].pdf

    Flex(MXML+AS)实现的计算器

    在这个“Flex(MXML+AS)实现的计算器”项目中,开发者使用了MXML来设计计算器的界面,而ActionScript则用于实现计算器的各种数学运算功能,包括加、减、乘、除以及开根号和幂运算。 首先,我们来看计算器的界面设计...

    flex ant

    在 Flex 开发中,源码通常由 MXML 和 ActionScript 文件组成,Ant 可以调用 Flex 编译器来编译这些源文件,并生成可执行的 SWF 或 AIR 应用。 压缩包子文件的文件名称 "MonkeyContactsExample" 告诉我们这可能是一...

    Ant 当个 脚本Flex

    【描述】虽然描述部分为空,但我们可以推断这篇博文可能涉及使用Ant来管理Adobe Flex项目的构建过程。Flex是一种用于创建富互联网应用程序(RIA)的开放源代码框架,主要使用ActionScript和MXML编写。Ant的灵活性使...

    About-MXML.zip_flex_mxml

    此外,MXML还可以与ActionScript代码混合使用,通过ActionScript进行业务逻辑处理和高级功能实现。 关于ActionScript: ActionScript是Flex应用程序的后端编程语言,负责处理非界面相关的逻辑。在MXML文件中,可以...

    flex-MXML语法

    flex -MXML语法,介绍flex 的 mxml的基本语法构成,适合一般学习者使用

    flex_ant.zip

    使用这样的Ant脚本,开发者可以轻松地在命令行上运行`ant compile`命令,从而自动编译Flex项目,无需手动操作IDE。这对于持续集成(CI)环境尤其有用,因为它可以方便地集成到自动化构建流程中。 总结起来,"flex_...

    flex的mxml语言基础

    Flex项目使用两种主要的编程语言:MXML和ActionScript 3.0。MXML类似于HTML,用于构建项目的可视部分,它定义了组件、布局和其他界面元素。而ActionScript 3.0是一种全面面向对象的语言,与JavaScript有相似之处,但...

    mxml-2.9.rar_mxml_mxml-2.9 编译_rhythmeg1_xml

    使用mxmlc命令行工具或者Flex Builder IDE,开发者可以将MXML文件编译成SWF(Shockwave Flash)文件,这个文件可以在Web浏览器中运行,提供丰富的用户体验。 学习和掌握MXML-2.9的关键在于理解其组件模型、事件处理...

Global site tag (gtag.js) - Google Analytics