下載安裝Auto工具包:
- http://code.taobao.org/mvn/repository/com/alibaba/citrus/tool/antx-autoconfig/1.0.9/antx-autoconfig-1.0.9.tgz
- http://code.taobao.org/mvn/repository/com/alibaba/citrus/tool/antx-autoexpand/1.0.9/antx-autoexpand-1.0.9.tgz
tar zxvf autoconfig-1.0.9.tgz
tar zxvf autoexpand-1.0.9.tgz
cp autoconfig /usr/local/bin
cp autoexpand /usr/local/bin
------------------------------------------------------------------------------------------------------
引:<filter>${user.home}/antx.properties</filter>
用指定的properties文件(${user.home}/antx.properties
)中的值,替換上述文件行中的placeholders(占位符)
AutoConfig不需要提取源碼,也不需要重新build,即可改變目標文件中所有配置文件中placeholders的值,並對placeholder及其值進行檢查。
AutoConfig Features:
名稱 | 描述 |
---|---|
兩種用法 |
|
對目標文件而不是源文件進行配置 |
|
驗證和編輯properties |
|
|
|
|
創建war和jar包的AutoConfig機制,關鍵在於創建war或jar目標包中的/META-INF/autoconf/auto-config.xml
描述文件
-------------------------------------------------------------------------------------------------------------
AutoConfig描述文件示例:
<?xml version="1.0" encoding="UTF-8"?> <config> <group> <property name="petstore.work" description="應用程序的工作目錄" />

<property name="petstore.loggingRoot" defaultValue="${petstore.work}/logs" description="日志文件目錄" />

<property name="petstore.upload" defaultValue="${petstore.work}/upload" description="上傳文件的目錄" />

<property name="petstore.loggingLevel" defaultValue="warn" description="日志文件級別">

<validator name="choice" choice="trace, debug, info, warn, error" />

</property>
</group>
<script>
<generate template="WEB-INF/web.xml" />

<generate template="WEB-INF/common/resources.xml" /> </script> </config>
定義一個property的完整格式如下:
例如下定義一個property
<property name="..." [defaultValue="..."] [description="..."] [required="true|false"] > <validator name="..." /> <validator name="..." /> ... </property>
可用的property參數包括:
定義property時可用的參數如下:
參數名 | 說明 |
---|---|
name |
Property名稱。 |
defaultValue (可選) |
默認值。默認值中可包含對其它property的引用,如${petstore.work}/logs |
description (可選) |
對字段的描述,這個描述會顯示給deployer,這對他理解該property非常重要。 |
required (可選) |
是否“必填”,默認為true 。如果deployer未提供必填項的值,就會報錯。 |
目前,有以下幾種驗證器:
可用的property驗證規則如下
驗證規則 | 說明 |
---|---|
<validator name="boolean" /> |
Property值必須為 |
<validator name="choice" choice="trace, debug, info, warn, error" /> |
Property值必須為choice所定義的值之一。 |
<validator name="email" /> |
Property值必須為合法的email格式。 |
<validator name="fileExist" [file="WEB-INF/web.xml"] /> |
Property值必須為某個存在的文件或目錄。 如果指定了file,那就意味着property值所指的目錄下,必須存在file所指的文件或子目錄。 |
<validator name="hostExist" /> |
Property值必須為合法的IP地址,或者可以解析得到的域名。 |
<validator name="keyword" /> |
Property值必須為字母、數字、下划線的組合。 |
<validator name="number" /> |
Property值必須為數字的組合。 |
<validator name="regexp" regexp="..." [mode="exact|prefix|contain"] /> |
Property值必須符合regexp所指的正則表達式。 其中,mode為匹配的方法:
如未指定mode,默認mode為contain。 |
<validator name="url" [checkHostExist="false"] [protocols="http, https"] [endsWithSlash="true"] /> |
Property值必須是合法URL。 假如指定了 假如指定了protocols,那么URL的協議必須為其中之一; 假如指定了 |
描述文件中,每個<generate>
標簽指定了一個包含placeholders的配置文件模板,具體格式為:
生成配置文件的指令:
<generate template="..." [destfile="..."] [charset="..."] [outputCharset="..."] >
下面是參數的說明:
生成配置文件的指令參數:
參數名 | 說明 |
---|---|
template |
需要配置的模板名。 模板名為相對路徑,相對於當前jar/war/ear包的根目錄。 |
destfile (可選) |
目標文件。 如不指定,表示目標文件和模板文件名相同,但是默認生成路徑為包下的根目錄,即Base URL目錄 |
charset (可選) |
模板的字符集編碼。 XML文件不需要指定 對其它文件必須指定charset。 |
outputCharset (可選) |
目標文件的輸出字符集編碼。 如不指定,表示和模板charset相同。 |
AutoConfig的尋找模板的邏輯是:
-
如果在
auto-config.xml
所在的目錄下發現模板文件,就使用它; -
否則在包的根目錄中查找模板文件;如果兩處均未找到,則報錯。
書寫模板是很簡單的事,你只要:
-
把需要配置的點替換成placeholder:“
${property.name}
”。當然,你得確保property.name被定義在auto-config.xml
中。 -
假如模板中包含不希望被替換的運行時的placeholder“
$
{...}
”,需要更改成“${D}
{...}
” 。
此外,AutoConfig模板其實是由Velocity模板引擎來渲染的。因此,所有的placeholder必須能夠通過velocity的語法。
使用不符合velocity語法的placeholders
例如,下面的placeholder被velocity看作非法:
${my.property.2}
解決的辦法是,改寫成如下樣式:
${my_property_2}
----------------------------------------------------------------------------------------------------------
Autoconfig工具的使用
最簡單的AutoConfig命令
autoconfig petstore.war 無論petstore.war
是一個zip包還是目錄,AutoConfig都會正確地生成其中的配置文件
AutoConfig會生成一個日志文件,就在auto-config.xml
所在的目錄下,名字為:auto-config.xml.log
。
默認情況下,AutoConfig會按下列順序查找user properties:
-
當前目錄 ./antx.properties
-
當前用戶HOME目錄/antx.properties
你可以指定一個自己的properties文件,用下面的命令:
autoconfig ... –u my.props
你可以指定另一個輸出文件或目錄,這樣,原來的文件或目錄就不會被修改:
autoconfig petstore.war –o petstore-configured.war
一般不需要特別指定charset,除非AutoConfig自動識別系統編碼出錯,導致顯示亂碼。運行AutoConfig獨立可執行程序
autoconfig ... -c GBK
如果auto-config.xml描述文件中已定義了該”Property name“,而antx.properties文件中未指定相應”Property name“值,
則執行autoconfig時會提示如下圖所示要求更新antx.properties配置文件內容。選擇使用默認值或是手動更新指定值,使用默認值的話逐項選擇Next后再選Yes保存即可。
假如發現模板中某個placeholder,並未在auto-config.xml
中定義,就會出現以下錯誤:
摘自http://webx.taobao.org/docs/autoconfig.html