• phing用户手册第四章Getting Started译文


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



  • 相关阅读:
    记一次曲折的运维经历-2020-04-23
    linux主机上执行wget命令遇到的问题
    linux系统上部署nfs服务
    【精】Linux磁盘I/O性能监控之iostat详解
    ssh_exchange_identification: Connection closed by remote host 解决方法
    nginx backup 功能
    mysql 报错 get error 28 from storage engine 解决方法
    mysql常用sql语句
    关于mysql 主从同步错误解决方法
    azure负载均衡上遇到的坑-12-28
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3144956.html
Copyright © 2020-2023  润新知