前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ant and Flex 用Ant编译MXML文件 - 蚂蚁咬断松紧带(^_^)

Ant and Flex 用Ant编译MXML文件 - 蚂蚁咬断松紧带(^_^)

作者头像
阿敏总司令
发布2019-02-28 15:24:56
6660
发布2019-02-28 15:24:56
举报
文章被收录于专栏:简单就是美!简单就是美!

阅读更多

Ant and Flex 用Ant编译MXML文件 - 蚂蚁咬断松紧带(^_^)

http://iamin.blogdriver.com/iamin/1173623.html

以下的描述均Flex 1.5为例

一、Flex Server 1、安装后,我们可以在%FLEX_HOME%目录下看到三个.war文件flex.war profiler.war samples.war不用多介绍了吧。

2、%FLEX_HOME%/bin目录下看到许多文件,以下几个执行文件是我们关注的 compc、mxmlc:都是 Macromedia Flex Builder ,两个文件是一模一样的作用,连文件内容也是一样的,不信自己去Beyond Compare一下 可以运行 compc -version 或 mxmlc -version 得到它们的版本号信息 Macromedia Flex Build: 87315.134646 使用方法如下:当然我们可以在Ant里面调用执行文件来进行编译,但是不是很爽啦:( Usage: compc [-version] [-configuration path] [-flexlib path] [-libpath path] [-systemclasses path] [-g] [-O0] [-profile] [-o path] [-headless] [-contextroot root] [-proxyurl url] [-proxyhttpsurl url] [-proxyallowurloverride] [-gatewayurl url] [-gatewayhttpsurl url] [-remoteallowurloverride] [-webroot directory] [-aspath path] [-genlibdir dir] [-encoding file_encoding] [-namespace uri manifestfile] [-report] [-loglevel error|warn|info|debug] [-manifest manifest] [-root root] foo.mxml

fdb:是调试工具,没有用过,直接运行它,可以看到信息 Macromedia fdb (Flash Player Debugger) [build 87315.134646] 输入help可以看到所有的操作命令与功能简介,quit退出,看自带的文档进行详细查阅,没有研究过它

licensetool:License工具 Usage: license [-install licensekey] [-info] flex-war-filename|flex-war-directory

3、%FLEX_HOME%/lib目录下,赫赫,这个应当是我们更加想关注的哦。 里面有 compc.jar mxmlc.jar fdb.jar licensetool.jar 和 flex-tools.jar 五个.jar文件,不过前四个都只有1k,咋一看,有点晕,肯定是啥也没有的东东,何用?不过。。。 打开一看,里面均是只有META-INF\MANIFEST.MF一个文件 细看mxmlc.jar有Main-Class: flex.tools.Mxmlc ../classes/ flex-tools.jar flex-bootstrap.jar xercesPatch.jar oscache.jar xercesImpl.jar xmlParserAPIs.jar jakarta-oro-2.0.7.jar batik-awt-util.jar batik-bridge.jar batik-css.jar batik-dom.jar batik-ext.jar batik-gvt.jar batik-parser.jar batik-script.jar batik-svg-dom.jar batik-util.jar batik-transcoder.jar batik-xml.jar axis.jar commons-discovery.jar commons-logging.jar jaxrpc.jar saaj.jar wsdl4j.jar concurrent.jar commons-collections.jar 看到这里应当说就有点儿豁然开朗了吧。 继续 ../classes/这个在%FLEX_HOME%下没有发现 flex-tools.jar在这个目录下有 其它的也都没有。。。不过,应当一眼扫一下就知道在哪里有了:) OK,在%FLEX_HOME%/flex.war里/WEB-INF/lib/目录下可以发现flex-bootstrap.jar、flexgateway.jar、commons-collections.jar、commons-beanutils.jar 在%FLEX_HOME%/flex.war里/WEB-INF/flex/jars/目录下可以发现其它的jar包了。 这样基本上所需的枪炮都找到了。要开工了。

二、准备Ant编译所需的文件 1、基本工作,解压%FLEX_HOME%/flex.war到你的项目工作目录%YOUR_PROJECT%下面,或者就扔到%TOMCAT_HOME%\webapps\下面,让Tomcat帮你解压:) 2、把%FLEX_HOME%/flex-tools.jar拷贝到%YOUR_PROJECT%/WEB-INF/flex/jars/下面 3、把%YOUR_PROJECT%/WEB-INF/flex/license.properties拷贝到%YOUR_PROJECT%/WEB-INF/flex/jars/下面 要不然会报告 License Service: Unable to open license file - .\WEB-INF\flex\jars\license.properties (系统找不到指定的文件。) WARNING License Service: The Flex 1.5 Trial Edition evaluation period will expire in 55 days. License Service: Flex 1.5 Trial Edition enabled Warning: applications compiled into standalone SWFs using the Trial and Developer editions of Macromedia Flex expire 1 day after creation.  This restriction is only in place for the Trial and Developer editions of Macromedia Flex.

三、建立Ant编译文件和任务 在%YOUR_PROJECT%下建立build.properties和build.xml文件

1、build.properties文件,内容如下 #Flex Libs Path flex.lib=./WEB-INF/flex/jars #Internet Explorer Path webbrowser=D:/Program Files/Internet Explorer/iexplore.exe #FlashPlayer flashplayer=E:/Program Files/Macromedia/Flex/bin/SAFlashPlayer.exe #WebServer URL webserver=http://localhost:9080/flex #Project Path projectpath=F:/OpenSource/Eclipse/workspace/flex #.mxml file path without .mxml suffix mxmlfilepath=01module/User

说明webbrowser、flashplayer、projectpath为绝对路径,请进行相应的修改 重要的!!!webserver为你的Web应用访问地址,这个是用来进行开发RemotingObject时要设置gatewayurl的,如-gatewayurl ${webserver}/amfgateway mxmlfilepath为你要编译的.mxml文件路径,不要带后缀名 编译时只要ant -Df=yourpath/YourMXML就是编译你的yourpath/YourMXML.mxml了,编译成功后就会用浏览器打开它; 想用FlashPlayer打开,运行ant runflash -Df=yourpath/YourMXML就是编译你的yourpath/YourMXML.mxml并用FlashPlayer打开。

2、build.xml文件,内容如下 <project name="FlexMXMLASCompiler" default="all" basedir=".">  <property file="${basedir}/build.properties"/>  <property name="flex.dist.lib" value="${flex.lib}" />  <property name="app.dir" value="." />  <property name="config.xml" value="${app.dir}/WEB-INF/flex/flex-config.xml" />  <property name="src.dir" value="${app.dir}/src" />  <property name="dest.dir" value="${app.dir}/bin" />  <property name="library.dest.dir" value="${dest.dir}/libs" />  <property name="mxmlfile" value="${mxmlfilepath}"/>  <property name="f" value="${mxmlfile}"/>

 <!-- Include All Needed .Jar Files -->  <path id="lib.class.path">   <fileset dir="${flex.dist.lib}">    <include name="*.jar"/>   </fileset>  </path>

 <!-- Init -->  <target name="init">   <mkdir dir="${dest.dir}" />   <mkdir dir="${library.dest.dir}" />  </target>

 <!-- Compile .mxml to .swf -->  <macrodef name="makemxml2swf">      <attribute name="mxmlfilepath"/>   <sequential>    <!-- Compile -->    <java classname="flex.tools.Mxmlc" dir="${app.dir}" fork="true" failonerror="true" classpathref="lib.class.path">     <arg line="-flexlib '${flex.dist.lib}' -gatewayurl ${webserver}/amfgateway -configuration ${config.xml} -webroot . -o @{mxmlfilepath}.swf @{mxmlfilepath}.mxml" />    </java>   </sequential>  </macrodef>

 <!-- Run .swf By Internet Explorer -->  <macrodef name="runswfbyie">      <attribute name="mxmlfilepath"/>      <sequential>      <exec executable="${webbrowser}" spawn="true">       <arg value="${webserver}/@{mxmlfilepath}.swf"/>      </exec>     </sequential>  </macrodef>

 <macrodef name="runswfbyflash">      <attribute name="mxmlfilepath"/>      <sequential>      <exec executable="${flashplayer}" spawn="true">       <arg value="${projectpath}/${f}.swf"/>      </exec>     </sequential>  </macrodef>

 <!-- Build .mxml to .swf and Access By Internet Explorer -->  <target name="mxml2swf" depends="init">   <makemxml2swf mxmlfilepath="${f}"/>   <runswfbyie mxmlfilepath="${f}"/>  </target>

 <target name="runflash" depends="init">   <makemxml2swf mxmlfilepath="${f}"/>   <runswfbyflash mxmlfilepath="${app.dir}/${f}"/>  </target>

 <!-- Delete swf File -->  <target name="clean" description="clean up">   <delete file="${app.dir}/${f}.swf"/>  </target>  <!-- Delete the ${build} and ${dist} directory trees -->  <target name="cleanAll" description="clean up">   <delete dir="${dest.dir}"/>  </target>

 <target name="all" depends="mxml2swf">  </target> </project>

3、%YOUR_PROJECT%目录下建立01module/User.mxml文件进行测试之

集成到GEL、Eclipse、IDEA、JBuilder等等IDE工具里就不用详细说了吧:)

四、结果测试 1、通过以上的构建,在程序中以RemoteObject与服务器进行通讯的方式编译运行没有问题,当然要设置好RemoteObject的配置; 懒人就是设置*了:) flex-config.xml <remote-objects>  <whitelist>   <unnamed>   <source>*</source>

2、HttpService访问形式编译运行也成功,但是有相对路径问题,浏览器里可以用相对路径,如果想用FlashPlayer进行测试,那就得在mxml里写死绝对的URL了:(,可以通过AS设置一个全局变量来设置网址,其它文件引用使用之即可用FlashPlayer来进行测试了。 注意在mxml里加上<mx:HTTPService useProxy="false" 访问XML数据统一以UTF-8格式进行返回,也没有出现中文乱码问题 设置如下 flex-config.xml <http-service-proxy>  <whitelist>   <unnamed>       <url>http://{localserver}/*</url>    <url>https://{localserver}/*</url>

3、Web Services访问形式编译运行也成功 同样也要注意在mxml里加上<mx:HTTPService useProxy="false" 并且用wsdl代替serviceName进行访问,要不然不能编译通过的。注意哦。 设置如下 flex-config.xml <web-service-proxy>  <whitelist>   <unnamed>       <url>http://{localserver}/*</url>    <url>https://{localserver}/*</url>

BTW: 1、编译后的.swf没有.mxml有Title:),只能自己去建立一个html包一包了。 今后正式部署就把html和swf往生产的机器上面部署即可了。

2、今后用Flex 2.0后,再对2.0进行使用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2006-04-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档