Phing是什么?
Phing是一個(gè)基于Apache Ant的項(xiàng)目代碼構(gòu)建系統(tǒng).你可以用她做傳統(tǒng)的構(gòu)建系統(tǒng)能做的任何事情,比如GNU make,并且Phing使用簡(jiǎn)單的XML構(gòu)建文件和可擴(kuò)展的”任務(wù)”使之成為易于使用和極具可擴(kuò)展性的框架.
因?yàn)镻hing是基于Ant的,所以本手冊(cè)部分內(nèi)容是摘自Ant手冊(cè).
Phing & Binarycloud :歷史
Phing源自Binarycloud的一個(gè)子項(xiàng)目.Binaryclound是一個(gè)高度工程化的框架,為了在企業(yè)環(huán)境中使用而設(shè)計(jì).Binarycloud廣泛使用XML來(lái)存儲(chǔ)關(guān)于項(xiàng)目的元數(shù)據(jù)(配置,節(jié)點(diǎn),窗口小部件,站點(diǎn)結(jié)構(gòu),等等).
因?yàn)锽inarycloud是為PHP構(gòu)建的,在每一個(gè)頁(yè)面請(qǐng)求上執(zhí)行XML處理和轉(zhuǎn)換是不切實(shí)際的.Phing用于”編譯”XML元數(shù)據(jù)為可被PHP引擎處理的數(shù)組形式.
當(dāng)然,XML”編譯”只是Binarycloud使用Phing構(gòu)建系統(tǒng)的許多方法中的一個(gè).Phing構(gòu)建系統(tǒng)使你能夠:
1. 從單一的源代碼樹構(gòu)建多語(yǔ)言頁(yè)面.
2. 在單個(gè)XML文件中聚集元數(shù)據(jù)(Metadata)并且用多個(gè)不同的XSLT生成幾個(gè)文件.(譯者注:在XSLT2.0規(guī)范中,消除了1.0規(guī)范只能有一個(gè)輸入一個(gè)輸出的限制,現(xiàn)在我們可以做到單一輸入來(lái)生成多個(gè)輸出文件)
最初,Binarycloud使用GNU make構(gòu)建系統(tǒng),但是,這樣有些缺點(diǎn). 在makefile中的"Space before tab problem"問題.實(shí)際上,它僅在UNIX系統(tǒng)上沒有問題.因此需要尋找一個(gè)更好的構(gòu)架系統(tǒng).Apache Ant是一個(gè)不錯(cuò)的選擇—它使用XML構(gòu)建文件和模塊化的設(shè)計(jì).但問題是Ant用java寫成,要使用它你必須得在你得計(jì)算機(jī)上安裝Java虛擬機(jī).
Besides the need for yet another interpreter (i.e. besides PHP), there was also legal/ideological conflict in requiring a commercial JVM (there were problems with Ant on JVMs other than Sun's) for an LGPL'd Binarycloud.
因此,Phing開始開發(fā)了,Phing是一個(gè)借助于Ant的思想用PHP寫成的構(gòu)建系統(tǒng).第一版同時(shí)設(shè)計(jì)和開發(fā),因此不是十分穩(wěn)定.系統(tǒng)很快暴露出了它的限制并且需要一個(gè)更好的Phing系統(tǒng).因此衍生了Phing2的雛形.
Phing當(dāng)前的開發(fā)集中于Phing2,它涉及許多功能增強(qiáng),bug修正,并且最值得注意的轉(zhuǎn)變是用PHP5的抽象類,接口,和try/catch/throw異常處理來(lái)重寫了原來(lái)Phing的基礎(chǔ)代碼.
Phing怎樣工作
Phing使用包含一組項(xiàng)目構(gòu)建描述的XML構(gòu)建文件.構(gòu)建文件由一些運(yùn)行實(shí)際的命令的目標(biāo)組成(比如復(fù)制文件,刪除目錄,執(zhí)行數(shù)據(jù)庫(kù)查詢,等等).因此使用Phing,第一步要編寫構(gòu)建文件,然后運(yùn)行Phing,在構(gòu)建文件中定義的要執(zhí)行的目標(biāo).
phing −f mybuildfile.xml mytarget
如圖1,鍵入phing –h可以查看命令參數(shù)的描述
默認(rèn)情況下,Phing將會(huì)查找一個(gè)叫build.xml的文件.(除非構(gòu)建文件的名稱不是build.xml,否則不必為Phing指定構(gòu)建文件的名稱) 并且,如果沒有指定任何目標(biāo)那么Phing將執(zhí)行在<project>標(biāo)簽中設(shè)置的默認(rèn)目標(biāo)(default屬性所指定的).
Cool,so how can i help?
Phing當(dāng)前正在積極額開發(fā)之中并且又許多事情要完成.如果要參與其中,可以通過下面的方法:
1. 閱讀本手冊(cè)以了家Phing ;-)
2. 到http://phing.tigris.org訂閱”dev”郵件列表
設(shè)置Phing
本章的目標(biāo)是幫助你在你的操作系統(tǒng)上正確的設(shè)置和執(zhí)行Phing.一旦你正確的設(shè)置了phing你就不需要再回過頭來(lái)看這章了,除非你要重新安裝,或者是遷移到其他的平臺(tái).
有幾種方法來(lái)獲得Phing的發(fā)行包.如果你不想?yún)⑴c當(dāng)前的開發(fā),推薦你獲取最近的快照版本或穩(wěn)定版本,如果你有興趣參與我的的開發(fā),你可以從CVS獲取正在開發(fā)中的文件.
獲取Phing發(fā)行包的最容易的方法是訪問Phing的主頁(yè)http://phing.info 下載當(dāng)前相應(yīng)格式的你需要的分發(fā)包.
自2.0.0b1版之后,你可以可以下載PEAR可安裝包和完全的Phing分發(fā)包.如果你希望修改Phing,我們建議你下載完整的Phing發(fā)行包,這樣你可以創(chuàng)建你自己的PEAR包.如果你知識(shí)簡(jiǎn)單地使用Phing作為項(xiàng)目的需要或構(gòu)建其他的包,下載并且安裝PEAR包.
從CVS獲取一個(gè)正在開發(fā)中的拷貝
鼓勵(lì)你對(duì)Phing的開發(fā)作出貢獻(xiàn).如果你像參與到Phing的開發(fā)中或你知識(shí)對(duì)其中最新的功能感興趣,你可以看看下面的敘述并中從CVS獲取一份拷貝.
The CVS revisions of Phing are not bullet−proof and may fail to execute properly on your machine. Only obtain the CVS versions if you are absolutely aware of limitations and constraints of such an action.Additionally you should sign up to the development mailinglist to report and notice errors and incompatibilities.
我們假設(shè)你正運(yùn)行UNIX類型的操作系統(tǒng)
So we expect the CVS software is installed ant the cvs executable is in your system's search path.. However, the steps for a Windows based system are very similar.
這里有大量的關(guān)于如何使用CVS的資源可用,并且還有關(guān)于tigris項(xiàng)目管理平臺(tái)的CVS說明.
首先你必須做的第一件事是登錄到CVS服務(wù)器.在命令行下鍵入:
cvs –d :pserver:guest@cvs.tigris.org:/cvs login
如果你要作為開發(fā)者登錄到Tigris Web站點(diǎn)上.用你自己的用戶名和密碼登錄.你也可以以訪客的身份登錄到Tigris Web站點(diǎn).
要從項(xiàng)目源代碼資源庫(kù)中撿出個(gè)別的模塊(如果你不需要整個(gè)項(xiàng)目資源庫(kù)),鍵入:
cvs –d :pserver:guest@cvs.tigris.org/cvs checkout phing
PEAR 安裝
安裝Phing最簡(jiǎn)易的方法是使用pear安裝工具.
$> pear install http://phing.info/pear/phing-current.tgz
PEAR安裝工具將檢查包的依賴性,并把Phing的執(zhí)行腳本放到PHP的安裝目錄下面(pear命令腳本同時(shí)也在這個(gè)目錄下面)
非PEAR安裝(手動(dòng)安裝)
如果你不是用pear安裝,你可以自己手動(dòng)安裝,但這樣要復(fù)雜一些,你需要配置你的環(huán)境變量以使phing能夠找到phing.bat執(zhí)行腳本.你可以從http://phing.tigris.org下載
phing-2.0.0.zip 或phing-2.0.0.tar.gz ,解壓到任意一個(gè)目錄下,產(chǎn)生三個(gè)目錄 bin,docs和classes,然后設(shè)置環(huán)境變量PHING_HOME,把它指向到Phing目錄.
例如:我下載了phing-2.0.0.tar.gz 解壓到 D:\Phing 那么就把PHING_HOME設(shè)置為D:\Phing.
運(yùn)行Phing之前,你還需要做一下配置.
1. 添加$PHING_HOME(*nix)或%PHING_HOME%(windows)到PATH環(huán)境變量中.
2. 設(shè)置PHING_HOME環(huán)境變量指向到Phing的安裝目錄.
3. 設(shè)置PHP_COMMAND變量,指向php命令所在的位置,例如(*nix /usr/bin/php)或windows(c:\php5\php.exe)
4. 設(shè)置PHP_CLASSPATH環(huán)境變量以包含Phing需要額類庫(kù).至少應(yīng)該包含%PHP_HOME%\classes.
還有一種方法是把%PHP_HOME%\classes路徑添加到php.ini文件中的include_path參數(shù)中去.
5. 檢查php.ini,并確保有如下設(shè)置
a) nax_execution_time = 0 // 不限制
b) memory_limit = 32MB // 決于你的構(gòu)建文件的大小,你可能需要更多的內(nèi)存
UNIX
如果你使用UNIX,使用 bash bourne shell,并且Phing安裝在/opt/phing目錄下
通過下面的方法適當(dāng)?shù)卦O(shè)置環(huán)境.
export PHP_COMMAND=/usr/bin/php
export PHING_HOME=/opt/phing
export PHP_CLASSPATH=${PHING_HOME}/classes
export PATH=${PATH}:${PHING_HOME}/bin
Windows
在Windows平臺(tái)生假設(shè)Phing安裝在 c:\opt\phing目錄,那么配置入下:
set PHP_COMMAND=c:\opt\php\php.exe
set PHING_HOME=c:\opt\phing
set PHP_CLASSPATH=c:\opt\phing\classes
set PATH=%PATH%;%PHING_HOME%\bin
高級(jí)
有許多用于運(yùn)行Phing的變量,你至少需要如下幾個(gè)設(shè)置:
1. 如果你要Phing能夠使用其他的包/類,那么你要把他們添加到PHP_CLASSPATH變量中PHP.ini文件的include_path變量中.
2. 有些任務(wù)要求第三方庫(kù).
調(diào)用Phing
現(xiàn)在,你準(zhǔn)備在命令行或腳本中調(diào)用Phing了.下面的章節(jié)簡(jiǎn)要的描述了如何正確的執(zhí)行Phing
命令行
Phing在命令行執(zhí)行也很簡(jiǎn)單.僅僅切換到構(gòu)建文件所在的目錄,并鍵入:
phing [targetname]
Getting Started
phing構(gòu)建文件用XML標(biāo)記語(yǔ)言編寫,因此你應(yīng)該有一些XML和Ant的基礎(chǔ)知識(shí)才能很好的理解下面的章節(jié),在web上有許多的資源可用。
XML和Phing
構(gòu)建文件有如下基本結(jié)構(gòu):
1. 文檔序言(document prolog)
2. 根元素<project>
3. 幾個(gè)類型元素(<property>,<fileset>,<patternset>)
4. 包含一個(gè)或幾個(gè)內(nèi)建的或用戶自定義的任務(wù)元素(例如:<javac>,<tar>)
編寫一個(gè)簡(jiǎn)單的構(gòu)建文件
<?xml version="1.0"?>
<project name="FooBar" default="dist" basedir=".">
<!—?jiǎng)?chuàng)建文件夾-->
<target name="prepare">
<echo msg="Preparing build..." />
<mkdir dir="./build" />
</target>
<!—復(fù)制文件-->
<target name="build" depends="prepare">
<echo>Building...</echo>
<copy file="./src/File.php" to="./build/File.php"/>
<copy file="./src/File2.php" to="./build/File2.php"/>
</target>
<!—打包-->
<target name="dist" depends="build">
<echo message="Creating archive..." />
<tar outfile="furbee.tar.gz" basedir="./build"/>
</target>
<!—?jiǎng)h除,清理-->
<target name="clean">
<echo msg="Cleaning up..."/>
<delete file="./build"/>
</target>
</project>
project 元素
文件序言之后緊跟著的第一個(gè)元素的是<project>,此元素是一個(gè)包含其他元素的容器,并且有以下屬性:
<project>的屬性:
屬性 含義 要求的?
name 項(xiàng)目的名稱 No
basedir 項(xiàng)目的根目錄,如果未指定將使用當(dāng)前目錄 No
default 在調(diào)用構(gòu)建文件的時(shí)候,如果沒有指定要執(zhí)行的目標(biāo),
將執(zhí)行在此定義的項(xiàng)目默認(rèn)目標(biāo) Yes
description 項(xiàng)目的描述 Yes
target 元素
一個(gè)目標(biāo)可依賴其他的目標(biāo).你可能有一個(gè)在構(gòu)建樹中安裝文件的目標(biāo),例如,創(chuàng)建一個(gè)tar.tgz分發(fā)包的目標(biāo).
Target元素的屬性:
屬性 含義 要求
name 目標(biāo)的名稱 Yes
depends 此目標(biāo)依賴的逗號(hào)分隔列表 No
if 為了使此目標(biāo)得以執(zhí)行而必須設(shè)置的屬性的名稱 No
unless 為了使此目標(biāo)得以執(zhí)行而禁止設(shè)置的屬性的名稱
任務(wù)元素
一個(gè)任務(wù)是一段可執(zhí)行的PHP代碼段.此代碼段實(shí)現(xiàn)了特定的行為(例如,復(fù)制文件).因此你必須在構(gòu)建文件中定義,才能是Phing真正的調(diào)用它.
附錄有一組核心任務(wù)和許多可選的任務(wù).編寫你自己的任務(wù)也很容易(擴(kuò)展Phing一節(jié)).
任務(wù)可以被分配一個(gè)id屬性:
<taskname id=”taskID” …/>
property 元素
屬性是在構(gòu)建文件使用的基本的變量,可以在構(gòu)建文件中通過 PropertyTask任務(wù)設(shè)置或在Phing外部通過命令行傳遞.通過命令行傳遞的屬性總是會(huì)覆蓋在構(gòu)建文件中設(shè)置的屬性,也就是說命令行是最后傳遞給Phing的,自然會(huì)覆蓋先前在構(gòu)建文件中設(shè)置的屬性.
屬性有一個(gè)名稱和一個(gè)唯一的值.屬性可以作為任務(wù)屬性的值.這是通過在”${”和”}”包含屬性名稱來(lái)設(shè)置的.例如:
<propery name=”javasourcedir” value=”./src/java”/>
<javac srcdir=”${javasourcedir}”/>
這里在運(yùn)行時(shí)${javasourcedir}將被展開為./src/java
內(nèi)建屬性
Phing給你提供了訪問系統(tǒng)屬性的能力,好像它已經(jīng)通過<property>定義過的一樣.例如,${os.name}展開為操作系統(tǒng)的名稱.附錄有完整的內(nèi)建屬性的列表.
更復(fù)雜的構(gòu)建文件
<?xml version="1.0" ?>
<project name="testsite" basedir="." default="main">
<property environment="env"/>
<property file="${env.BCHOME}/build.properties"/>
<property name="package" value="${phing.project.name}" override="true" />
<property name="builddir" value="${env.BCHOME}/build/testsite" override="true" />
<property name="srcdir" value="${project.basedir}" override="true" />
<!-- Fileset for all files -->
<fileset dir="." id="allfiles">
<include name="**">
</fileset>
<!-- Main Target -->
<target name="main" description="main target">
<copy todir="${builddir}">
<fileset refid="allfiles" />
</copy>
</target>
<!-- Rebuild -->
<target name="rebuild" description="rebuilds this package">
<delete dir="${builddir}" />
<phingcall target="main"/>
</target>
</project>
構(gòu)建文件首先用<property>標(biāo)記調(diào)用PropertyTask任務(wù)來(lái)定義屬性.然后它定義一個(gè)文件集和兩個(gè)目標(biāo).
前面5個(gè)元素定義了項(xiàng)目的屬性.(按照訪問方式不同分三種)
1.(環(huán)境變量)第一個(gè)property元素,有屬性environment屬性,其值為env,這樣就可以通過env.VARIABLE_NAME的方式來(lái)訪問環(huán)境變量.例如,我可以調(diào)用echo任務(wù)吧env.PATH變量打印在控制臺(tái)輸出上:
<echo messages=”${env.PATH}”/>
這樣就會(huì)輸出PATH環(huán)境變量的字符串.
2.(文件)第二個(gè)propery元素僅包含file屬性,這里file屬性的值是一個(gè)相對(duì)的或絕對(duì)的指向?qū)傩晕募穆窂剑▽傩晕募?后綴名為 .properties,其中包含的鍵值對(duì)(key/value)的集合,格式見附錄E).
3.(直接在構(gòu)建文件中定義屬性變量)通過如下方式定義:
<property name=”propertyname” value=”propertyvalue”/>
另外要注意的是構(gòu)建文件中的<fileset>標(biāo)簽.它定義一個(gè)文件集合,例如一組多個(gè)文件組成的集合.你還可以用<fileset>元素的子元素<include>和<exclude>包含和排除<fileset>文件模式指定的文件集合
譯者注:實(shí)際上<fileset>最終所包含的文件是<include>和<exclude>的差集)
關(guān)于文件集,見附錄C有更詳盡的描述.另外<fileset>標(biāo)簽有id屬性,通過id屬性可以在其他地方引用.就像直接包含一樣,通過引用實(shí)現(xiàn)了代碼的復(fù)用.
第一個(gè)任務(wù)僅僅包含通過<copy>標(biāo)簽調(diào)用的CopyTask任務(wù).其中并沒有用<include>和<exclude>標(biāo)簽來(lái)包含和排除文件,而是用了<fileset>的refid屬性來(lái)引用前面定義的fileset,這樣我們就可以在一個(gè)定方定義,而在構(gòu)建文件中的其他地方多次的使用.
在第二個(gè)目標(biāo)中使用了<phingcall>標(biāo)簽來(lái)調(diào)用了PhingTask任務(wù)(詳盡見附錄B)
設(shè)置Phing
本章的目標(biāo)是過去和正確的設(shè)置并且在你的操作系統(tǒng)上執(zhí)行Phing,你但以安裝完成就不必在回過頭來(lái)再看這章,除非你要重新安裝或移植到其他平臺(tái)上去.
系統(tǒng)要求
操作系統(tǒng)
要使用Phing你必須安裝PHP5.0.0b1和以上的版本并且加上 –with-libxml2,和—with-xsl選項(xiàng).
if you want to make use of advanced functionality. At the time of writing PHP5.0.0b2−dev is currently unable to run Phing due to segmentation faults arising somewhere in the XML parsing of the build file.
關(guān)于PHP和其要求額模塊請(qǐng)查看PHP網(wǎng)站http://www.php.net 對(duì)于一個(gè)簡(jiǎn)要的軟件依賴性列表如下
項(xiàng)目組件
這一章的目標(biāo)是使你熟悉構(gòu)建文件的基本組件.讀完這一章,即使你不知道構(gòu)建文件中;某些代碼段的含義,你也能夠讀懂,和理解構(gòu)建文件的基本結(jié)構(gòu).
對(duì)于補(bǔ)充的參考信息,你可以查看附錄A,附錄B,附錄C,附錄D.
Project
在項(xiàng)目文件結(jié)構(gòu)中,必須定義<project>元素,它是Phing構(gòu)建文件的根元素,是必須的,意味著所有的項(xiàng)目相關(guān)的信息都是包含這<project>元素以內(nèi)的.
<?xml version=”1.0”?>
<project name=”test” description=”this is a simple test for buildfile” default=”main”>
<!—Everything else here-->
</project>
project的三個(gè)屬性,name—項(xiàng)目名稱,這是必須的,description—項(xiàng)目的簡(jiǎn)單描述,default—如果在執(zhí)行時(shí)沒有指定目標(biāo),那么將使用項(xiàng)目的默認(rèn)目標(biāo).
Project Components In General
項(xiàng)目組件是你能夠在項(xiàng)目文件中找到的所有描述項(xiàng)目信息的標(biāo)記,目標(biāo)是項(xiàng)目組件,還有任務(wù),類型,等等.項(xiàng)目組件可能有屬性和嵌套的標(biāo)簽.屬性僅僅包含簡(jiǎn)單的值,例如字符串,整數(shù),等等.嵌套的元素可以是復(fù)雜的Phing類型(如Filesets)或簡(jiǎn)單的值的封裝類(wrapper classes)
編寫映射器
創(chuàng)建一個(gè)Mapper
在PHP5中編寫一個(gè)文件Mapper由PHP5支持的接口簡(jiǎn)化了.本質(zhì)上,你的自定義文件名mapper必須實(shí)現(xiàn)phing.mappers.FileNameMappers接口.這里有一個(gè)創(chuàng)建DOS文件名風(fēng)格的文件名Mapper
附錄A 情況說明書
hing內(nèi)建屬性
屬性 內(nèi)容
application.startdir
host.arch 主機(jī)名稱.在Windows上不可用
host.doman DNS域名.例如php.net.在Windows不可用
host.fstype 文件系統(tǒng)類型,可能的取值為UNIX,WINNT,WIN32.
host.machine 系統(tǒng)架構(gòu).例如,i586.在Windows不可用
host.name 由posix_name()返回的名稱,在Windows上不可用
host.os.release 操作系統(tǒng)正是發(fā)行版本,例如2.2.10,在Windows上不可用
host.os.version 操作系統(tǒng)版本, #4 Tue Jul 20 17:01:36 MEST 1999.在Windows上不可用
lince.separator 行分隔符,Unix為”\n”,Windows為”\r\n”,Macintosh為”\r”
php.classpath PHP_CLASSPATH環(huán)境變量的值.
php.version PHP解釋器的版本.
phing.buildfile 當(dāng)前構(gòu)建文件的完整路徑
phing.id
phing.version 當(dāng)前的Phing版本
project.name 當(dāng)前項(xiàng)目名稱
project.basedir 當(dāng)前項(xiàng)目的根路徑
project.description 當(dāng)前項(xiàng)目描述
user.home 環(huán)境變量HOME的值
附錄B 核心任務(wù)
AdhocTaskdefTask
AdhocTypedefTask
AppendTask
AvailableTask
CallTargetTask
CopyTask
DeleteTask
EchoTask
ExecTask
ForeachTask
InputTask
MkdirTask
MoveTask
PhingTask
PearPackageTask
PhpEvalTask
PropertyTask
ReflexievTask
ResolvePathTask
arTask
askdefTask
TouchTask
TypedefTask
UpToDateTask
XsltTask
附錄C 核心類型
這是一個(gè)Phing系統(tǒng)數(shù)據(jù)類型的參考
FileList文件列表
FileList數(shù)據(jù)類型,正如它的名字一樣描述文件,不像FileSets,FileList可以包含還沒有創(chuàng)建的文件,就是說它不在文件系統(tǒng)中。同樣FileLists可以用指定的順序來(lái)描述文件,然而從文件系統(tǒng)返回的FileSet確實(shí)無(wú)序的。
使用例子
<filelist dir="/etc" files="httpd/conf/httpd.conf,php.ini"/>
或者使用一個(gè)列表文件(listfile屬性),每行包含一個(gè)文件名
<filelist dir="conf/" listfile="ini_files.txt"/>
這將截取ini_files.txt文件中的每一行作為一個(gè)文件返回到FileList中
屬性
Name Type Description Default Required
dir String files和listfile指出的文件所在的目錄 N/A Yes
files String 逗號(hào)或空格分隔的文件列表 N/A Yes(或listfile)
listfile String 一個(gè)表示一個(gè)文件列表的文本文件,
每行表示一個(gè)文件 N/A Yes(或files)
PATH/CLASSPATH
Core Filters
Phing Filter Reader
Expand Properties
HeadFilter
LineContains
LineContains RegExp
Prefix Lines
Replace Tokens
ReplaceRegexp
StripLineBreaks
StripLineComments
StripPHPComments
TabToSpace
TailFilter
XsltFilter
Core Mappers
FlattenMapper
GlobMapper
IdentityMapper
ergeMapper
RegexpMapper
附錄D 項(xiàng)目組件
Phing項(xiàng)目
Projects在構(gòu)建文件中是項(xiàng)目最外面的容器元素,同時(shí)<project>也是項(xiàng)目構(gòu)建文件中的根元素,它包含有名稱,目錄,一個(gè)簡(jiǎn)短的描述和默認(rèn)目標(biāo)等屬性.
項(xiàng)目可包含任務(wù)調(diào)用和目標(biāo).(如下)
例子:
<project name=”TestProject” basedir=”.” default=”main”
Description=”This is a test project to show how to use projects”>
<!—Everthing else goes here -->
</project>
屬性
名稱 類型 描述 默認(rèn) 要求否
basedir 字符串 項(xiàng)目的根目錄 n/a Yes
default 字符串 如果沒有在命令行指定目標(biāo),
將使用這里定義的默認(rèn)目標(biāo) all No
description 字符串 項(xiàng)目簡(jiǎn)單描述 n/a No
name 字符串 項(xiàng)目的名稱 n/a Yes
目標(biāo)
例子:
<target if=”lang” unless=”lang.en” depends=”foo1,foo2” name=”main”
Description=”This is a example target”>
<!—everything else gose here -->
</target>
定義在上面例子中的這個(gè)目標(biāo)僅在屬性lang設(shè)置并且屬性lang.en沒有設(shè)置時(shí)執(zhí)行,另外它依賴foo1和foo2兩個(gè)目標(biāo),意思是在main目標(biāo)執(zhí)行前必須執(zhí)行foo1和foo2兩個(gè)目標(biāo),這個(gè)目標(biāo)的名稱是mian并且有一個(gè)簡(jiǎn)單的描述.
名稱 類型 描述 默認(rèn) 要求否
depends String 當(dāng)前目標(biāo)所以來(lái)的目標(biāo),
如果有多個(gè)依賴目標(biāo),以逗號(hào)分隔 n/a No
description String 關(guān)于目標(biāo)的簡(jiǎn)短的描述信息 n/a No
if String 必須設(shè)置的屬性 n/a No
unless String n/a No
name String 目標(biāo)名稱 n/a Yes
附錄E 文件格式
構(gòu)建文件格式
下面的XML文件顯示的了構(gòu)建文件的一個(gè)骨架,它僅包含了一個(gè)project和一個(gè)target元素.關(guān)于如何使用他們,可查看有關(guān)Phing Types和Tasks的信息.
<?xml version=’1.0’ ?>
<!--
The root tag of each build file must be a "project" tag.
-->
<project name="(projectname)" [basedir="(projectbasedir)"]
[default="(targetname)"] [description="(projectdescription)"]>
<!−−
Type and task calls here, i.e. filesets, patternsets,CopyTask calls etc.
−−>
<target name="(targetname)" [depends="targetname1,targetname2"]
[if="(ifproperty)"] [unless="(unlessproperty)"]>
<!−−
Type and task calls here, i.e. filesets, patternsets,CopyTask calls, etc.
−−>
</target>
<!−−
More targets here
−−>
</project>
屬性文件格式
屬性文件定義屬性.屬性以鍵/值對(duì)的形式保存,并且只包含純文本,屬性文件的后綴名稱一般是.properties,構(gòu)建文件的默認(rèn)屬性文件是build.properties
# Property files contain key/value pairs
key=value
# Property keys may contain alphanumeric chars and colons, but
# not special chars. This way you can create pseudo−namespaces
myapp.window.hsize=300
myapp.window.vsize=200
myapp.window.xpos=10
myapp.window.ypos=100
# You can refer to values of other properties by enclosing their
# keys in "${}".
text.width=${myapp.window.hsize}
# Everything behind the equal sign is the value, you do
# not have to enclose strings:
text=This is some text, Your OS is ${php.os}
# I guess that is all there is to property files
參考資料
國(guó)際標(biāo)準(zhǔn)
[osi−model]
OSI (Open System Interconnect) 模型
http://www.iso.org
http://www.instantweb.com/foldoc/foldoc.cgi?OSI
[xml10−spec]
W3C XML 1.0 規(guī)范
http://www.w3.org/XML/
[unicode]
Unicode
http://www.unicode.org
許可
[gnu−lgpl]
The GPL (Gnu Lesser Public License)
http://www.gnu.org/licenses/lgpl.html
[gnu−fdl]
The Gnu FDL (Free Documentation License), the license used for this documentation
http://www.gnu.org/licenses/fdl.html
開源項(xiàng)目
[bc]
Binarycloud
http://www.binarycloud.com
http://binarycloud.tigris.org
[w3c−tidy]
HTMLTidy, a W3C (x)HTML and XML syntax checker and code beautifier
http://www.w3c.org/People/Ragget/tidy/
[phpdoc]
PHPDoc 項(xiàng)目
http://www.phpdoc.de
[phpclasses]
Manuel Lemos的 PHPClasses 資源庫(kù)
http://www.phpclasses.org
[pear]
PEAR (Php Extension Archive Repository) PHP擴(kuò)展庫(kù)
http://pear.php.net
[ant]
Ant, a Java Build Tool, the main inspiration for Phing
http://ant.apache.org
[gnumake]
GNU make, an inspiration for Phing
http://www.gnu.org/software/make/make.html
[pollo]
Pollo, a visual editor for XML files. A schema to edit phing build files is shipped with Phing.
http://pollo.sourceforge.net
[gingerall]
GingerAlliance − Home Of Sablotorn
http://www.gingerall.com
[php]
PHP 官方主頁(yè) PHP Hypertext Preprocessor
http://www.php.net
[gnu]
GNU (GNU's Not Unix)組織
http://www.gnu.org
[phing]
Phing (PHing Is Not Gnumake) 主頁(yè)
http://phing.info
[cvs−howto]
Short manuals for CVS
http://www.ucolick.org/~de/CVSbeginner.html
[cvs−tigris]
CVS and tigris.org
http://binarycloud.tigris.org/project/www/docs/ddUsingCVS_command−line.html
其他資源
[javadoc]
Sun Javadoc
http://java.sun.com/j2se/javadoc/
[zend]
Zend Technologies, Ltd.
http://www.zend.com
手冊(cè)
M
T
T
P