Flex Ant自動構建

1.  Flex SDK Ant

       Flex開發者會遇到很多,比如自動構建,在一個有著N多模塊,N處源碼,構建過程復雜的Flex項目開發中,依賴人力手工構建項目非常不現實(機械重復且枯燥無味的過程,相信哪位開發人員都會避之唯恐不及,而且對于人力是非常大的浪費),而通過使用Ant,我們可以將這些工作交給機器來做,機器最適合干的就是這些程序固定,順次執行的工作,而且不辭辛苦,又快又好

1.1.     Ant簡介

       Ant是一種基于Java的build工具。理論上來說,它有些類似于(Unix)C中的make,但沒有make的缺陷。目前的最新版本為:Ant -1.9.0。

既然我們已經有了make、gnumake、nmake、jam以及其他的build工具為什么還要要一種新的build工具呢?因為Ant的原作者在多種(硬件)平臺上開發軟件時,無法忍受這些工具的限制和不便。類似于make的工具本質上是基于shell(語言)的:他們計算依賴關系,然后執行命令(這些命令與你在命令行敲的命令沒太大區別)。這就意味著你可以很容易地通過使用OS特有的或編寫新的(命令)程序擴展該工具;然而,這也意味著你將自己限制在了特定的OS,或特定的OS類型上,如Unix。

       Ant就不同了。與基于shell命令的擴展模式不同,Ant用Java的類來擴展。(用戶)不必編寫shell命令,配置文件是基于XML的,通過調用target樹,就可執行各種task。每個task由實現了一個特定Task接口的對象來運行。

        簡言之:當一個代碼項目大了以后,每次重新編譯,打包,測試等都會變得非常復雜而且重復,因此C語言中有MAKE腳本來幫助這些工作的批量完成。在JAVA中應用是平臺無關性的,當然不會用平臺相關的MAKE腳本來完成這些批處理任務了,ANT本身就是這樣一個流程腳本引擎,用于自動化調用程序完成項目的編譯,打包,測試等。除了基于JAVA是平臺無關的外,腳本的格式是基于XML的,比MAKE腳本來說還要好維護一些。

1.2.   獲取Flex SDK

 Adobe發布了Flash Builder 4.5 (包含Flex SDK 4.5,點擊這里查看新聞報道) 和 Adobe CS5.5(下載地址請登錄Adobe官網,這里是相關學習資料)。新版IDE的重點是針對移動應用開發的支持(Android,iOS等等),不過,這些不是文本要探討的內容。讓我們從Flex SDK著手,了解一些Flex的內在機制和對企業級開發的支持,這也有助于我們更好的理解Flex這門技術。

首先,從哪里可以獲取Flex SDK?最簡單最直接的方式,就是安裝Flash Builder(以下簡稱FB),當您安裝完畢,可以打開FB的安裝位置,目錄sdks下面,就是目前比較常用的Flex SDK版本。具體位置因您的安裝選擇而異,比如筆者的路徑是:C:\Program Files (x86)\Adobe\Adobe Flash Builder 4.6\sdks。因為筆者安裝的是FB 4.5,所以目錄中實際上包含了兩個版本的SDK:3.6和4.6

如果您安裝的是FB4.0,則看到的最新SDK版本應該是4.0或4.1。而那個比較老的3.6版本,主要是為了兼容之前的Flex3項目(如果您有比較老版本的項目,而且不打算做代碼變更,那么3.6這個版本的SDK是必須的)。本文的探討將以最新的SDK,也就是4.5為準。

        打開SDK目錄,讓我們看看SDK中都包含了哪些內容:

1.png

  ant包含FlexAnt的支持庫,JARJava源碼都有,方便我們基于Ant完成對項目的構建

 asdoc基于ASDOC我們可以很方便的生成代碼說明文檔,這個目錄則包含了對ASDOC的模板支持(調用asdoc的時候,所依賴的HTML模板文件就存放在這個目錄),以及一個用于Ant構建的示意XML配置文件,仔細瀏覽這個目錄下的文件,就可以對ASDOC有更好的了解。

 bin按照慣例,我們基本也能猜出這個目錄下是什么,沒錯,就是Flex SDK中包含的工具集(編譯工具,庫打包工具,文檔生成工具,以及優化工具等等,這些可都是Flex開發所必須的利器),這些工具的具體用法,我們會在后面的文章中介紹。建議您將這個路徑配置到系統用戶的PATH中,方便通過命令行調用相應的工具。

  frameworks這個也是重中之重,包含了Flex框架的核心源碼(您應該也已經了解到,Flex是基于AS3的一個框架,其底層代碼均是由AS3編寫的(注:不包含工具集,工具是Java編寫)),當您在Flex編程中有疑惑,看一眼源碼或許會讓您茅塞頓開。

  include包含了一個用于編寫ActionScript擴展的C++頭文件:FlashRuntimeExtensions.h,如果您基于AIR做一些嵌入式應用(比如一個電視機),需要實現換臺等功能,那就要用C++實現一些ActionScript的擴展。

  install包含了用于移動開發的Android USB驅動程序

 lib開發和編譯Flex應用所依賴的類庫,打開這個目錄您就能發現很多的JAR文件,比如mxmlc.jar,另外您可能已經注意到還有mxmlc_zh_CN.jar,顯然這些庫大都實現了本地化,方便我們的開發和調試。

  runtimes包含運行時支持,但沒有Flash Player,只有AIR,包括AIR for Android的APK文件 

samples一些實例文件,包括用于AIR在線無縫安裝的badge,和一些Flex主題。 

templates包含一些模板文件,比如用于AIR應用描述的XML約束定義文檔,swfobject的示例代碼等等

2.  Flex對ANT的支持

下面我們來了解一下Flex對Ant的支持情況。打開Flex SDK下的Ant目錄,會看到下面的文件結構:

lib中包含了Flex對Ant的任務支持庫:flexTasks.jar,src目錄中包含了flexTasks的Java源碼,build.xml則是用于構建flexTasks本身的配置文件(如果您修改了flexTask的Java源碼,可以用這個配置文件,重新編譯,并打包到flexTasks.jar)。

README.txt這個文件則簡單描述了如何使用flexTask,筆者已經將它翻譯為中文,即README_CN.txt,您可以從本文的頁面底部的下載區下載這個文件。

打開MxmlcTask.java,我們可以看到,這就是對mxmlc工具的任務封裝,方便我們在Ant中基于配置文件來調用mxmlc實現對Flex項目的編譯。     

其實Flex的ant是跨平臺的。在windos下使用的是mxmlc.exe,而在unix系統下使用的mxmlc。mxmlc就是shell腳本。

3.  環境搭建

 

當然,首先您得安裝Ant,下載地址:http://apache.claz.org//ant/binaries/apache-ant-1.9.0-bin.zip

然后解壓,例如我解壓到:d:/apache-ant-1.9.0

如果想運行ant方便,最好設置環境變量(添加路徑到系統用戶Path)

其實也可以直接進入到相應的目錄直接執行ant:d:/apache-ant-1.9.0/bin/ant

接著,打開CMD窗口,運行ant -version,如果能看到正確的輸入信息,就代表Ant配置成功了。

然后,將flexTasks.jar這個文件放到您的Ant安裝目錄中的lib目錄中。雖然也可以采取將JAR文件的地址作為一個參數傳遞給Ant的方法,但為了方便起見,推薦直接拷貝flexTasks.jar的方式。

另外,注意您想使用的構建工具(比如mxmlc或asc)必須包含在您的PATH設置里。將sdk/bin這個目錄也配置到Path中,您的Path設置應該類似于下面的:

  1. C:\Program Files (x86)\Java\jdk1.6.0_25\bin;D:\Program Files\Adobe\Adobe Flash Builder 4.5\sdks\4.5.0\bin;C:\ant\bin

請輸入下面的命令到CMD窗口:mxmlc -version,如果有正確的輸出,代表Flex SDK的路徑配置成功。

需要安裝JDK、Ant,并設置環境變量;將flexTasks.jar這個文件放到您的Ant安裝目錄中的lib目錄中,并設置環境變量。

將該壓縮包解壓到一個目錄,然后配置環境變量:

set ANT_HOME=E:\AutoBuild\common\apache-ant-1.9.0
set path=%path%;%ANT_HOME%\bin;
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_26
set path=%path%;%JAVA_HOME%\bin
set path=%path%; F:\flex_sdk_4.1.0.16076\bin

運行下面命令成功,表示環境已經搭建好了:

4.  自動構建

    使用ant自動構建一個項目時,首先應該編寫Ant構建文件。構建文件定義了構建過程,并被團隊開發中每個人使用。Ant構建文件默認命名為build.xml,也可以取其他的名字。只不過在運行的時候把這個命名當作參數傳給Ant。

3.1.     build.properties文件

創建build.properties,即Ant的變量配置文件,該文件定義了需要用的配置參數。

3.2.     build.xml文件

Ant構建文件是XML文件。每個構建文件定義一個唯一的項目(Project元素)。每個項目下可以定義很多目標(target元素),這些目標之間可以有依賴關系。當執行這類目標時,需要執行他們所依賴的目標。每個目標中可以定義多個任務,目標中還定義了所要執行的任務序列。Ant在構建目標時必須調用所定義的任務。任務定義了Ant實際執行的命令。Ant中的任務可以為3類。

 核心任務。核心任務是Ant自帶的任務。

 可選任務??蛇x任務實來自第三方的任務,因此需要一個附加的JAR文件。

 用戶自定義的任務。用戶自定義的任務實用戶自己開發的任務。

<project>標簽

每個構建文件對應一個項目。<project>標簽時構建文件的根標簽。它可以有多個內在屬性,就如代碼中所示,其各個屬性的含義分別如下。

(1) default表示默認的運行目標,這個屬性是必須的。

(2) basedir表示項目的基準目錄。

(3) name表示項目名。

(4) description表示項目的描述。

每個構建文件都對應于一個項目,但是大型項目經常包含大量的子項目,每一個子項目都可以有自己的構建文件。

<target>標簽

一個項目標簽下可以有一個或多個target標簽。一個target標簽可以依賴其他的target標簽。例如,有一個target用于編譯程序,另一個target用于聲稱可執行文件。在生成可執行文件之前必須先編譯該文件,因策可執行文件的target依賴于編譯程序的target。Target的所有屬性如下。

(1) name表示標明,這個屬性是必須的。

(2) depends表示依賴的目標。

(3) if表示僅當屬性設置時才執行。

(4) unless表示當屬性沒有設置時才執行。

(5) description表示項目的描述。

Ant的depends屬性指定了target的執行順序。Ant會依照depends屬性中target出現順序依次執行每個target。在執行之前,首先需要執行它所依賴的target。程序中的名為run的target的depends屬性compile,而名為compile的target的depends屬性是prepare,所以這幾個target執行的順序是prepare->compile->run。一個target只能被執行一次,即使有多個target依賴于它。如果沒有if或unless屬性,target總會被執行。

<mkdir>標簽

該標簽用于創建一個目錄,它有一個屬性dir用來指定所創建的目錄名,其代碼如下:<mkdir dir=”${class.root}”/>通過以上代碼就創建了一個目錄,這個目錄已經被前面的property標簽所指定。

<delete>標簽

該標簽用于刪除一個文件或一組文件,去屬性如下:

(1).file表示要刪除的文件。

(2).dir表示要刪除的目錄。

(3).includeEmptyDirs 表示指定是否要刪除空目錄,默認值是刪除。

(4).failonerror 表示指定當碰到錯誤是否停止,默認值是自動停止。

(5).verbose表示指定是否列出所刪除的文件,默認值為不列出。

<copy>標簽

該標簽用于文件或文件集的拷貝,其屬性如下。

(1).file 表示源文件。

(2).tofile 表示目標文件。

(3).todir 表示目標目錄。

(4).overwrite 表示指定是否覆蓋目標文件,默認值是不覆蓋。

(5).includeEmptyDirs 表示制定是否拷貝空目錄,默認值為拷貝。

(6).failonerror 表示指定如目標沒有發現是否自動停止,默認值是停止。

(7).verbose 表示制定是否顯示詳細信息,默認值不顯示。

3.3.     實例

這是使用flex ant自動構建項目的一個例子。下面通過這個例子來介紹如何編寫字段構建文件build.xml、build.properties。Ant自動化腳本完成了以下工作:

 編譯as3項目生成swf

 

1、首先新建ActionScript項目 testflash,假如項目目錄:d:/work/testflash

    1.jpg

 

2、使用ant構建

    1)build.properties文件中定義了以下配置屬性

    

# points to the project's libs directory  
LIB_PATH =${basedir}/lib  
  
# this is the folder we want to publish the swf to  
DEPLOY_DIR = ${basedir}/bin  
  
# defines the Flex framework files location  
FLEX_FRAMEWORK = ${FLEX_HOME}/frameworks/libs  
  
# this property defines the doc directory, which will store your created ASDocs later in the article  
DOC_DIR =${basedir}/DOC  
  
# defines the title for your ASDoc pages  
#DOC_TITLE ="Your doc title"  
  
# defines the footer for your ASDoc pages  
#DOC_FOOTER = "Copyright 2010 My Company"  
  
# points to your asdoc.exe for ASDoc creation later  
#asdoc.exe =${FLEX_HOME}/bin/asdoc.exe  
  
#以上內容在build.xml實際內如如下:  
#   <property name="FLEX_HOME" value="C:\Program Files (x86)\Adobe\Adobe Flash Builder 4.6\sdks\3.6.0"/>   
#   <property name="DEPLOY_DIR" location="bin"/>   
#   <property name="SOURCE_DIR" location="src"/>   
#   <property name="LIB_PATH" location="lib"/>   
#   <property name="VERSION" value="1.7.1"/>

build.xml構建文件,簡單生成swf:

2.<?xml version="1.0" encoding="utf-8"?>   
<!-- 默認執行"build"任務 -->  
<project name="TTT" basedir="." default="build">   
    <!-- load previously defined configuration properties file-->  
    <property file="build.properties" />  
  
    <taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" />  
    <!-- 執行清理原文檔文件夾執行編譯flash;然后重新生成文檔 -->  
     <target name="build">  
        <echo>---------------編譯flash---------------</echo>  
        <!--完成當前構建任務所需的4個調用,首先是清理,如果bin下面有文件,刪除掉;-->  
        <antcall target="clean"/>  
        <antcall target="compile">  
            <param name="projectName" value="testflash"/>  
        </antcall>  
  
    </target>  
      
  
    <!--執行清理-->  
    <target name="clean">   
       <delete includeemptydirs="true">  
       <fileset dir="${DEPLOY_DIR}" includes="**/*"/>  
    </delete>  
  
    </target>  
    <!--編譯flash-->  
    <target name="compile">  
        <mxmlc  
            file="${SOURCE_DIR}/${projectName}.as"  
            output="${DEPLOY_DIR}/${projectName}.swf"  
            static-rsls="true"  
            accessible="true"  
            debug="false">  
            <!--設置源代碼位置-->  
            <source-path path-element="${SOURCE_DIR}"/>  
        </mxmlc>  
    </target>  
  
</project>

1)把C:/Program Files (x86)/Adobe/Adobe Flash Builder 4.6/sdks/3.6.0/ant/flexTasks.tasks 拷貝到d:/work/testflash,當然可以在build引用絕對路徑。

2)build.xml 和build.properties都在放在d:/work/testflash。

3)運行:在cmd下進入到d:/work/testflash,如ant已經設置環境變量了。

    直接輸入ant就可以了。如果沒有設置環境變量,引用絕對路徑:d:/apache-ant-1.9.0/bin/ant。

轉自:http://blog.csdn.net/hguisu/article/details/8751432

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/2645

(0)
s19930811s19930811
上一篇 2016-03-22
下一篇 2016-03-22

相關推薦

  • day06(8-3)作業-文件權限

    第一題、三種權限rwx對文件和目錄的意義     權限對文件的意義         r(read):可以讀取文件的內容,如讀取文本文件的內容         w(write):可以編輯、新增或者是修改文件的內容,但不含有刪除文件(…

    Linux干貨 2016-08-04
  • Linux網絡命令學習

    Linux網絡命令之網絡環境查看命令:ifconfig:查看與配置網絡狀態命令(只能看到IP地址和子網掩碼)ifup 網卡設備名:啟用該網卡設備,如:ifup eth0和ifdown lonetstat 選項:  -t:列出TCP協議端口  -u:列出UDP協議端口  -l:僅列出在監聽狀態網絡服務  -a:查看所有連…

    Linux干貨 2017-06-25
  • 馬哥教育網絡班22期+第5周課程練習

    week5: 1、顯示當前系統上root、fedora或user1用戶的默認shell; [root@rs1 ~]# awk -F':' '$1 ~ /^(root|fedora|user1)/{print $1,$NF}' /etc/pa…

    Linux干貨 2016-09-08
  • Centos 7 之systemd

    Centos 7 之systemd systemd POST –> Boot Sequence –> Bootloader –> kernel + initramfs(initrd) –> rootfs –> /sbin/init init: CentOS 5: Sys…

    Linux干貨 2016-09-23
  • 優云APM最佳實踐: 診斷平安城市視頻網性能問題

    前言: 平安城市已經是一個關系你我他的民生工程,但由于本身系統的復雜性,給運維工作帶來了極大的挑戰。如何保障攝像頭在線率?如何在系統中找到視頻系統故障的問題所在?在我們某一次項目經歷中,優云APM在發現問題,定位故障等方面,起了很大作用,幫助我們順利的定位到了系統的故障所在。 平安城市是一個特大型、綜合性非常強的管理系統,不僅需要滿足治安管理、城市管理、交通…

    Linux干貨 2016-08-05
  • Linux Bash Shell有關變量

    bash 創建一個子bash-n 查看是否有錯誤-x 逐行顯示信息$:顯示當前PIDPPID :顯示父進程PIDSHLVL :顯示當前shell是幾級shellpstree 顯示進程樹-p 同時顯示進程號ps -ef 顯示進程信息 本地變量 :僅對當前SHELL有效,對子SHELL也無效環境變量:對當前SHELL及子SHELL均有效。 set 顯示本地變量和…

    2017-09-16
欧美性久久久久