本章是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。

转载于:https://www.cnblogs.com/snake-hand/p/3144956.html

phing用户手册第四章Getting Started译文相关推荐

  1. 第四章 道德经第四章原文 道德经第四章译文

    道德经第四章原文 道冲①,而用之有弗盈也②.渊呵③!似万物之宗④.锉其兑⑤,解其纷⑥,和其光⑦,同其尘⑧.湛呵⑨!似或存⑩.吾不知其谁之子,象帝之先⑾. 道德经第四章译文 大"道" ...

  2. Gradle 1.12用户指南翻译——第五十四章. 构建原生二进制文件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  3. 信息安全工程师学习笔记《第四章》

    第四章 网络安全体系与网络安全模型 本章内容主要包括: 第一,讲述了网络安全体系的基本概念以及相关安全模型,主要包括机密性模型.完整性模型.信息流模型.信息保障模型.能力成熟度模型.纵深防御模型.分层 ...

  4. 计算机系统概论(原书第2版)部分课后习题答案(第四章)

    小编在学计系1的时候,一直找不到中文版的答案,英文版的答案又要钱才能下载,而且这个书翻译的真的牛(cai)逼--有的题目有歧义或者直接翻译有问题,有的直接把题目搞错的,思考很久都没有结果--然后又要去 ...

  5. iOS Wow体验 - 第四章 - 为应用的上下文环境而设计

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第四章译文精选,其余章节将陆续放出.上一篇:Wow ...

  6. (转)iOS Wow体验 - 第四章 - 为应用的上下文环境而设计

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第四章译文精选,其余章节将陆续放出.上一篇:Wow ...

  7. 《Undocumented Windows 2000 Secrets》翻译 --- 第四章(6)

    第四章  探索Windows 2000的内存管理机制 翻译:Kendiv( fcczj@263.net ) 更新:Sunday, February 17, 2005 声明:转载请注明出处,并保证文章的 ...

  8. 高项_第十四章信息文档管理与配置管理

    第十四章信息文档管理与配置管理 软件文档分为三类 若管理文档中的3标注了开发文档,则属于开发文档里 若没有开发两字,则属于管理文档中 文档质量的四个等级 配置管理 什么是配置管理(了解) 配置管理的6 ...

  9. 高红梅:第四章 海明威文化身份的求索 第一节 斗牛与原始力量及原始文化的认同

    第四章  海明威文化身份的求索 如果说二十年代,海明威顺应美国青年作家流放欧洲的大潮,那么海明威终其一生都一直走在自我流放的路上.在这个过程中,海明威不仅探索了他的个人身份.社会身份,而且在与其他民族 ...

最新文章

  1. 【OS学习笔记】三十一 保护模式九:页目录、页表和页三者的关系详解
  2. php面试php数组变ahp,关于PHP字符串的一道面试题
  3. Chrome保存mht网页文件的方法 – 无需任何插件,完美!
  4. 开源无疆!CSDN 董事长蒋涛、GitHub 副总裁 Thomas Dohmke 即将重磅对话
  5. matlab erf erfi,中国樱桃AP2/ERF转录因子在花芽休眠解除过程的表达与作用研究
  6. 根据xsd文件逆向生成java类
  7. 第2章-系统控制原理 -> 李雅普诺夫稳定性分析
  8. 倾斜摄影三维建模过程和项目费用
  9. IDEA 导入p3c-formatter 格式化代码
  10. 自学c语言难,自学C语言/C++到底难在哪里?
  11. conda报错-Collecting package metadata (current_repodata.json): failed
  12. 非安装版 Python 安装 PIP
  13. 神来之笔-线程变量实践
  14. 泰拉瑞亚服务器怎么让玩家注册,泰拉瑞亚服务器权限指令大全
  15. 理论计算机科学方向,计算机科学与技术专业考研方向:计算机软件与理论
  16. uni-app下载和使用
  17. 【从零开始学习 UVM】6.4、UVM 激励产生 —— uvm_do 宏详解
  18. 不优雅地解决pytorch模型测试阶段显存溢出问题
  19. ksh 命令退出状态
  20. linux 原子变量

热门文章

  1. 经Apache将tomcat转用80port这两个域名
  2. php二维数组的取值与转换
  3. Struts2理解——转发和重定向
  4. linux环境中,top命令中,对command的命令进行扩展查看详情?
  5. hashMap put方法 第二行代码
  6. 移动端 | table 布局
  7. 虽然有索引,但没有用上
  8. PLSQL_Database Link的基本概念和用法(概念)
  9. VC 6.0 + SP6 下载 及 安装详细说明
  10. Publishing failed with multiple errors和Timeout waiting for Tomcat v5.5的解决方法