3.一些Phing的type元素(比如,,等)4.一個或多個元素,每個target包含內建或用戶自定義的Phingtask元素(例如,等)。WritingASimpleBuildfileFoob" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

phing用戶手冊第四章Getting Started譯文

系統 1781 0
本章是phing的入門篇,查看 原文請猛擊這里

XML And Phing
一個合法的Phing構建文件有以下幾部分構成:
1.文檔序言
2.唯一的根元素<project>
3.一些Phing的type元素(比如<property>, <fileset>, <patternset>等)
4.一個或多個<target>元素,每個target包含內建或用戶自定義的Phing task元素(例如<install>,
<bcc>等)。

Writing A Simple Buildfile
Foobar項目將一些php文件從源目錄安裝到目標目錄,并將這些文件作了打包處理。
    <?xml version="1.0" encoding="UTF-8"?>

<project name="FooBar" default="dist">

    <!-- ============================================ -->

    <!-- Target: prepare -->

    <!-- ============================================ -->

    <target name="prepare">

        <echo msg="Making directory ./build" />

        <mkdir dir="./build" />



    </target>

    <!-- ============================================ -->

    <!-- Target: build -->

    <!-- ============================================ -->

    <target name="build" depends="prepare">

        <echo msg="Copying files to build directory..." />

        <echo msg="Copying ./about.php to ./build directory..." />

        <copy file="./about.php" tofile="./build/about.php" />

        <echo msg="Copying ./browsers.php to ./build directory..." />

        <copy file="./browsers.php" tofile="./build/browsers.php" />

        <echo msg="Copying ./contact.php to ./build directory..." />

        <copy file="./contact.php" tofile="./build/contact.php" />

    </target>

    <!-- ============================================ -->

    <!-- (DEFAULT) Target: dist -->

    <!-- ============================================ -->

    <target name="dist" depends="build">

        <echo msg="Creating archive..." />

        <tar destfile="./build/build.tar.gz" compression="gzip">

            <fileset dir="./build">

                <include name="*" />

            </fileset>

        </tar>

        <echo msg="Files copied and compressed in build directory OK!" />

    </target>

</project>
  

一個phing的構建文件通常以build.xml命名。如果沒有指定文件名,phing會將build.xml作為默認執行的文件。

執行上面構建文件中的默認target,只要直接運行phing。
這將執行名為dist的target。執行構建文件中的task時將會輸出一些信息,顯示受影響的文件。
如果要執行其它target,只要在命令行中寫明相應的target名字即可。例如要執行名為build的target,只要執行:phing build即可。
其它命令行參數請參見附錄A(Fact?Sheet)。

Project Element
文檔序言之后的第一個元素就是根元素<project>。其它元素必須包含在<project>之中。它有以下屬性:
屬性
含意
是否必須
name
項目名稱
basedir
當前項目的起始目錄,“.”表示當前目錄。
注意:如果未指定此參數,則構建文件的父目錄將被設為默認值。
default
指定默認的target。如果在調用當前文件時未指定target,
將執行默認target。
description 項目描述

Target Element
一個target可以依賴其它target。Phing會處理它們之間的依賴關系。
注意,Phing的depend屬性僅能指定target的執行順序,不能確認依賴的target一定執行。當被依賴的target沒有必要執行時,Phing就不會執行它。
Phing按照從左至右的順序執行depends屬性中指定的target。注意,一個被依賴的target可能在早在之前由于另一個依賴關系的存在而被執行過,這時它將不會再被執行。
下面的例子將說明這一點:
      <target name="A" />

<target name="B" depends="A" />

<target name="C" depends="B" />

<target name="D" depends="C,B,A" />
    
假定我們想執行target D。根據它的depends屬性,你可能會認為執行順序會是,C,B,A。錯!C依賴B,B依賴A,因此A會先執行,然后是B,接下來是C,最后是D。
一個target只會執行一次,即使有很多taget依賴它時也是如此。
description屬性用于描述此target,命令行模式時可以通過-projecthelp選項將其打印出來。

Task Elements
一個task是一段可以被執行的php代碼。這段代碼完成一個特定的功能(比如安裝文件)。它在構建文件中定義,由Phing來調用。
task的基本結構如下:
      <name attribute1="value1" attribute2="value2" ... />
    
name是task名稱,attributeN是屬性名,valueN是屬性值。
有一系列的core task(參見附錄B,Core Tasks)以及一些optional task。你也可以很方便的定義自己的task(參見第6章,Extending Phing)。
task可以被賦予一個id屬性:
      <taskname id="taskID" ... />
    
可以在其它task中通id引用這個task。

Property Element
property是構建文件中的重要變量。通過PropertyTask設定property,也可以通過命令方式設定(命令行中設定的property值會覆蓋構建文件中的同名property值)。一個property只能有一個名字和一個值。property可以成為task的屬性值,使用時只需要將property的名字放在“${”和"}"之間即可。例如,假設我們定義了一個property叫作BC_BUILD_DIR,它的值為‘build’,我們可以這樣使用它:${BC_BUILD_DIR}/en。這條語句會被解析為build/en。
如果你使用了沒有通過property task定義的property,phing會從系統的環境變量中查找是否有同名property。例如,假如你使用了${BCHOME},但你沒有在命令行或構建文件中定義它,而環境變量中存在此值,那phing就會使用環境變量中的BCHOME值。

Built-in Properties
phing提供了訪問系統屬性的方法,其用法和通過<property>task定義的屬性一樣。比如,${os.name}代表的操作系統的名子。更多信息可參見附錄A中的Built-In Properties。

More Complex Buildfile
    <?xml version="1.0" encoding="UTF-8" ?>

    <project name="testsite" basedir="." default="main">

    <property file="./build.properties" />

    <property name="package" value="${phing.project.name}" override="true" />

    <property name="builddir" value="./build/testsite" override="true" />

    <property name="srcdir" value="${project.basedir}" override="true" />

    <!-- Fileset for all files -->

    <fileset dir="." id="allfiles">

        <include name="**" />

    </fileset>

    <!-- ============================================ -->

    <!-- (DEFAULT) Target: main -->

    <!-- ============================================ -->

    <target name="main" description="main target">

        <copy todir="${builddir}">

            <fileset refid="allfiles" />

        </copy>

    </target>

    <!-- ============================================ -->

    <!-- Target: Rebuild -->

    <!-- ============================================ -->

    <target name="rebuild" description="rebuilds this package">

        <delete dir="${builddir}" />

        <phingcall target="main" />

    </target>

</project>
  


這份構建文件首先定義了一些property。然后定義了一個fileset和二個target。下面我們來快速解讀下這份文件。

project標簽中的前五行用于定義property。它們展現了property標簽的兩種使用形式:
1.第二個property標簽只包含了一個file屬性。這個值必須對應一個property文件,可以使用絕對或相對路徑(文件格式參見附錄I,File Formats)。
2.標簽中含有name和value屬性。執行后,可以通過${name}的方式取得value值。

接下來我們看<fileset>標簽。它定義了一個文件集合。你可以使用inlude和exclude標簽來加入或排除文件。如果給fileset設置了id屬性,那么可以通過id引用該fileset。

下面說一說雙星表達式“**”。這個特定的正則表示所有子目錄下的所有文件。而一星“*”,只表示當目錄下的所有文件。
例:
      **/*.phps
    
表示當前目錄下,所有子目錄中的后綴為phps的文件。

第一個task是一個<copy>。注意copy標簽中的fileset,它沒有包含include或是exclude元素,而是通過refid引用了之前創建好的一個fileset。通過這種方式,你可以定義一個fileset,然后多次在構建文件中使用。

在第二個target中唯一值得注意的就是<phingcall> 標簽(更多信息可參見PhingCallTask)。這個task執行了和自己位于同一文件中的另外一個target。第二個target刪除了build目錄,然后調用main重新構建項目。

如果在命令行中使用-D參數給property賦值,則構建文件中的同名property的值將會被覆蓋。例如,如果在命令行中執行
      phing -Dbuilddir=/tmp/system-test
    
上例中的builddir值將不再是./build/testsite,而是/tmp/system-test。



phing用戶手冊第四章Getting Started譯文


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人精品视频一区二区在线 | 天天做天天爱天天综合网 | 欧美网站黄 | 性欧美www | 国产老熟 | 日韩在线第三页 | 午夜精品九九九九99蜜桃 | 亚洲成a人片在线v观看 | 国产另类图片 | 99视频在线看观免费 | 欧美一级片网 | 亚洲成人在线网 | 日韩欧美精品一区二区三区 | 福利社91| 欧美劲爆第一页 | 中文字幕影院 | 亚洲福利 影院 | 成年看片永远免费 | 毛片免费在线视频 | 久久天天躁狠狠躁狠狠躁 | 精品小视频在线 | 亚洲视屏在线 | 国产三级做爰高清视频a | 久久精品一区二区影院 | 久久精品亚洲乱码伦伦中文 | 天天操夜夜骑 | 久久精品综合视频 | 久热精品男人的天堂在线视频 | 热久久网站 | 热久久这里只有 | 梦想成为魔法少女在线观看 | 国产福利区一区二在线观看 | 欧美精品一区二区在线观看 | 一色屋精品亚洲香蕉网站 | 韩国精品videosex性韩国 | 久久精品这里是免费国产 | 精品视频在线播放 | 免费h片在线观看网址最新 免费v片在线观看无遮挡 | 国产精品999在线 | 欧美一级毛片高清免费观看 | 成人欧美视频 |