<?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>

Esse arquivo de configuração primeiramente define algumas propriedades com a tag <property>. E então é definido um fileset e dois targets. Vamos entrar em detalhes sobre cada item no arquivo XML.

As primeiras 5 tags definem tags de propriedades. Elas aparecem em duas maneiras:

A próxima coisa a se notar no arquivo é a tag <fileset>. Essa tag define um conjuntos de arquivos. Você pode incluir ou exclur arquivos com as tags include e exclude. Para maiores informações sobre fileset veja o apêndice D. O fileset utilizado no exemplo possui o atributo id para que seja possível referenciar esse fileset posteriormente.

Uma coisa que devemos nos atentar é ao uso das estrelas duplas "**". Essa regexp especial refere-se a todos os arquivos em todos os subdiretórios. Compare isso com apenas uma estrela "*" que refere-se a todos os arquivos no subdiretório atual. Por exemplo a expressão "**/*.phps" refere-se a todos os arquivos com o sufixo ".phps" em todos os subdiretórios corrente.

A primeira tarefa possue apenas uma chamada á tarefa CopyTask através da tag <copy>. A parte interessante aqui é o que tag copy possui dentro dela. Aqui, a tarefa fileset não é escrita com elementos include ou exclude mas sim o o atributo refid, o fileset criado anteriormente é referenciado. Dessa forma você pode utilizar varias vezes um fileset que foi definido apenas uma vez.

A unica coisa notável no segundo target é a chamada da tarefa PhingTask com a tag <phingcall> (Veja o apêndice B para maiores informações). A tarefa executa um target específico no mesmo arquivo XML. O que irá acontecer é que o segundo target irá remover o diretório build e chamar o target main de novo.

Podemos sobrescrever propriedades definidas no arquivo XML utilizando o argumento -D. Por exemplo para sobrescrever o builddir no arquivo XML acima poderiamos chamar o Phing da seguinte forma

$ phing -Dbuilddir=/tmp/system-test

Gerenciando dependências

Em construção