2011年9月14日 星期三

Flex compiler 學習筆記 - 2

# 設定檔 #
老是要輸入一堆設定值才能開始編譯,是一件很煩人的事情,因此可以將設定包覆在設定檔中,在編譯的時候載入。
Flex 預設的設定值存放在「[安裝目錄]/frameworks/flex-config.xml」裡,可以去修改它或是自己 copy 一份再進行調整。
在 Flash Builder 中,會將設定檔複製一份到「[安裝目錄]/sdks/[sdk 版本]/frameworks」下,因此如果要修改 Flash Builder 的設定,要到這個地方,光是修改 flex sdk 的預設值是沒有用的。

可以利用
mxmlc -dump-config [目標檔案名稱]
將目前的預設值 copy 出來存成複本,個人在使用這個指令的時候,會出現「錯誤: 必須指定目標檔案」的錯誤訊息,不過在「mxmlc -help」卻找不到這個指令的相關資訊,可能被隱藏起來了。
不過檔案倒是被建立出來,看到裡面的註解是中文的,又再次感受到 flex 開發團隊的用心。

設定檔的引用有兩種,皆是使用「-load-config」參數達到,一種是完整設定讀入,使用一般的參數設定方式就可以
mxmlc -load-config=[設定檔]
若是設定檔中只描述和預設值不同的部分,並非完整的設定檔,則可以用"結合"的方式進行讀取,使用「+=」表示
mxmlc -load-config+=[設定檔]

設定檔的讀取有個潛規則,如果有和編譯檔案相同名字的設定檔([檔名]-config.xml),則編譯器會去使用「+=」的方式,將這個設定檔案載入合併在預設設定檔之後。
以常理來說,通常放在這個位置的設定檔是專門為這次編譯修改,所以當設定的內容和預設值重複,則將會以此檔案的設定為優先。

依照 XML 的規則,除了宣告的標籤之外,只能有一個「根(root tag)」,在 Flex 的設定檔中,它的名字叫作「flex-config」。
在根底下,通常會出現 標籤,它包含了大部分編譯時可以設定的選項,實際上,表示的就是在「mxmlc -help list advanced」指令下,以「compiler.」開頭的那些設定選項。

官方文件上的一個例子…
在「mxmlc -help list advanced」中有一行「-compiler.source-path [path-element] [...]」,
表示這是 compiler 大項下的 source-path 設定項,並且是可以輸入多個值的。既然是多個值,在 XML 就需要有特定的 tag 將之包覆,這個 tag 的名稱就叫作「path-element」,也就是〔 〕裡包的字。所以設定檔可能會寫成…
<compiler>
    <source-path>
        <path-element>.</path-element>
        <path-element>c:/myclasses/</path-element>
    </source-path>
</compiler>

如果階層數很多的話,那不是要寫好幾層的 XML嗎?為什麼數值不能使用通用的「value」或其它固定字串,而必須看文件才能知道要使用什麼 tag 名稱?
理由則是因為,不同的 tag 名稱,本身才有被識別的條件,也才有省略其父節點的機會。在官方文件舉了這麼一個例子…
設定項「compiler.fonts.managers [manager-class][...]」照「正統」的設定檔輸入方式,應該是長底下這個樣子…
<compiler>
    <fonts>
        <managers>
            <manager-class>flash.fonts.JREFontManager</manager-class>
        </managers>
    </fonts>
</compiler>
但是可以經過省略父節點的方式簡化,因為「manager-class」本身就足以作為識別,所以可以省略 <fonts> 和 <managers> 變成下面這樣…
<compiler>
    <manager-class>flash.fonts.JREFontManager</manager-class>
</compiler>
(compiler 是大項,不能省略)

部分皂設定是有預設值的,像是「library-path」,絕大多數的情形下,我們不會希望原來的設定被蓋掉,而是希望「累加」上新的設定。
這個時候就會需要在設定加上「append="true"」的屬性,這樣編譯器就知道要累加而不是覆蓋設定了。如下所示…
<library-path append="true">
    <path-element>/mylibs</path-element>
    <path-element>/myotherlibs</path-element>
</library-path>

在文件中還提到可以使用 +token_name=value 的方式傳出變數,在設定檔中以 ${token_name} 的方式取出變數,不過因為沒有範例,自己到目前還不知道要如何調整設定選項。無法自行測試,只能先跳過這一段。

沒有留言:

張貼留言