Importar todos los archivos de compilación en un directorio - phing

Necesito incluir todos los archivos xml dentro de un directorio (no sé el nombre y la cantidad de archivos) en mi actual build.xml utilizando ImportTask.

Este es mi build.xml archivo:

<?xml version="1.0" encoding="utf-8"?>
<project name="New Project" basedir="." default="myimport">
    <target name="myimport" description="dummy to import other build files">
        <if>
            <isset property="file" />
            <then>
                <echo msg="Importing ${file}" />
                <import file="${file}" />
            </then>
        </if>
    </target>

    <if>
        <not>
            <isset property="dummy.property" />
        </not>
        <then>
            <echo msg="Now include all files in ./dev/build directory" />
            <property name="dummy.property" value="true" />
            <foreach param="msg" absparam="file" target="myimport">
                <fileset dir="./dev/build/">
                    <include name="*.xml"/>
                </fileset>
            </foreach>
        </then>
    </if>
</project>

y un archivo de ejemplo en el directorio de destino:

<?xml version="1.0" encoding="utf-8"?>
<project name="test" basedir="." default="dummy">
    <target name="dummy" description="Dummy task">
        <echo msg="Dummy task, just for test" />
    </target>

    <echo msg="Imported!" />
</project>

cuando corro phing -l el resultado es:

Buildfile: /home/f0rud/workspace/s/build.xml
     [echo] Now include all files in ./dev/build directory
  [foreach] Calling Buildfile '/home/f0rud/workspace/s/build.xml' with target 'myimport'

New Project > myimport:

     [echo] Importing ./dev/build/test.xml
     [echo] Imported!
Default target:
----------------------------------------------------------------------------
 myimport  dummy to import other build files

Main targets:
----------------------------------------------------------------------------
 myimport  dummy to import other build files

Pero no hay un objetivo ficticio (o test.dummy), ¿por qué?

Nota: hay un error divertido, si elimino la parte if, obtengo Maximum function nesting level of '100' reached, aborting! error pero ese no es mi problema (el si soluciono ese problema.)

preguntado el 21 de mayo de 12 a las 18:05

1 Respuestas

El problema es el trabajo de importación en el contexto global.

Cuando lo llamo dentro de un objetivo, no está disponible en el contexto global.

Así que he escrito una tarea de Phing simple para cargar todos los archivos de un conjunto de archivos de esta manera:

class ImportDirTask extends Task {

    /** Array of filesets */
    private $filesets = array();

    /**
     * Nested creator, adds a set of files (nested fileset attribute).
     */
    function createFileSet() {
        $num = array_push($this->filesets, new FileSet());
        return $this->filesets[$num-1];
    }

  /**
   * Parse a Phing build file and copy the properties, tasks, data types and 
   * targets it defines into the current project.
   *
   * @return void
   */
  public function main () {
    // filesets
    foreach ($this->filesets as $fs) {
        $ds       = $fs->getDirectoryScanner($this->project);
        $srcFiles = $ds->getIncludedFiles();
        $srcDirs  = $ds->getIncludedDirectories();
        foreach ($srcFiles as $f)
        {
            $task = new ImportTask();
            $task->setProject($this->project);
            $task->init();
            $task->setFile($this->file = $fs->getDir($this->project) . FileSystem::getFileSystem()->getSeparator() . $f);
            $task->main();
        }

     }
  } //end main

} //end ImportDirTask

Simplemente funciona.

Respondido 10 Feb 15, 22:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.