2013-10-07 2 views
10

мы используем phing для создания и тестирования нашего проекта. Я хочу как можно больше удалить зависимости от PEAR, чтобы я мог запускать разные версии пакетов для разных проектов. Я создал composer.json файл, который установит все необходимые пакетыPhing and composer

{ 
    "require": { 
     "php": ">=5.3.3", 
     "zendframework/zendframework": "2.2.*", 
     "doctrine/doctrine-orm-module": "*", 
     "phpoption/phpoption": "*" 
    }, 
    "require-dev": { 
     "phing/phing": "*", 
     "phpunit/phpunit": "*", 
     "pdepend/pdepend": "*", 
     "phpmd/phpmd": "*", 
     "phploc/phploc": "*", 
     "phpdocumentor/phpdocumentor": "*", 
     "squizlabs/php_codesniffer": "*", 
     "mayflower/php-codebrowser": "*", 
     "sebastian/phpcpd": "*", 
     "zendframework/zftool": "dev-master", 
     "zendframework/zend-form": "*", 
     "hounddog/doctrine-data-fixture-module": "*", 
     "pear/console_commandline": "dev-trunk", 
     "pear/log": "dev-master", 
     "pear/pear_exception": "dev-master" 
    }, 
    "config": { 
     "bin-dir": "vendor/bin/" 
    } 
} 

И у меня есть Phing build.xml

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

<project name="SolExactConnector" default="build"> 
    <property name="basedir" value="." override="true"/> 
    <property name="source" value="${basedir}/module"/> 

    <fileset dir="${source}" id="sourceWithoutTests"> 
     <include name="**/*.php"/> 

     <exclude name="*/test/"/> 

     <exclude name="*/Module.php"/> 
     <exclude name="*/config/module.config.php"/> 
     <exclude name="*/test/Bootstrap.php"/> 
    </fileset> 

    <fileset dir="${source}" id="sourceWithTests"> 
     <include name="**/*.php"/> 

     <exclude name="*/Module.php"/> 
     <exclude name="*/config/module.config.php"/> 
     <exclude name="*/test/Bootstrap.php"/> 
    </fileset> 

    <fileset dir="${source}" id="tests"> 
     <include name="*/test/**/*Test.php"/> 
    </fileset> 


    <target name="prepare" description="Clean up and create artifact directories"> 
     <delete dir="${basedir}/build/api"/> 
     <delete dir="${basedir}/build/code-browser"/> 
     <delete dir="${basedir}/build/coverage"/> 
     <delete dir="${basedir}/build/logs"/> 
     <delete dir="${basedir}/build/pdepend"/> 
     <delete dir="${basedir}/build/docs"/> 

     <mkdir dir="${basedir}/build/api"/> 
     <mkdir dir="${basedir}/build/code-browser"/> 
     <mkdir dir="${basedir}/build/coverage"/> 
     <mkdir dir="${basedir}/build/logs"/> 
     <mkdir dir="${basedir}/build/pdepend"/> 
     <mkdir dir="${basedir}/build/docs"/> 
    </target> 

    <target name="phpunit" description="Run unit tests" depends="prepare"> 
     <coverage-setup database="${basedir}/build/logs/coverage.db"> 
      <fileset refid="sourceWithoutTests"/> 
     </coverage-setup> 
     <phpunit haltonfailure="true" haltonerror="true" printsummary="true" bootstrap="test/Bootstrap.php" 
       codecoverage="true"> 
      <formatter todir="${basedir}/build/logs" type="clover" outfile="clover.xml"/> 
      <formatter todir="${basedir}/build/logs" type="xml" outfile="junit.xml"/> 
      <batchtest> 
       <fileset refid="tests"/> 
      </batchtest> 
     </phpunit> 
    </target> 

    <target name="lint" description="Perform syntax check of sourcecode files" depends="prepare"> 
     <phplint haltonfailure="true" cachefile="${basedir}/build/logs/lint.cache"> 
      <fileset refid="sourceWithTests"/> 
     </phplint> 
    </target> 


    <target name="pdepend" description="Generate jdepend.xml and software metrics charts using PHP_Depend" 
      depends="prepare"> 
     <phpdepend file="${source}"> 
      <logger type="jdepend-xml" outfile="${basedir}/build/logs/jdepend.xml"/> 
      <logger type="jdepend-chart" outfile="${basedir}/build/pdepend/dependencies.svg"/> 
      <logger type="overview-pyramid" outfile="${basedir}/build/pdepend/overview-pyramid.svg"/> 
     </phpdepend> 
    </target> 

    <target name="phpmd" description="Generate pmd.xml using PHPMD" depends="prepare"> 
     <phpmd file="${source}"> 
      <formatter type="xml" outfile="${basedir}/build/logs/pmd.xml"/> 
     </phpmd> 
    </target> 

    <target name="phpcpd" description="Generate pmd-cpd.xml using PHPCPD" depends="prepare"> 
     <phpcpd> 
      <formatter type="pmd" outfile="${basedir}/build/logs/pmd-cpd.xml"/> 
      <fileset refid="sourceWithTests"/> 
     </phpcpd> 
    </target> 

    <target name="phploc" description="Generate phploc.xml" depends="prepare"> 
     <phploc reportType="xml" reportName="phploc" 
       reportDirectory="${basedir}/build/logs"> 
      <fileset refid="sourceWithTests"/> 
     </phploc> 
    </target> 

    <target name="phpcs" description="Generate checkstyle.xml using PHP_CodeSniffer" depends="prepare"> 
     <phpcodesniffer 
       standard="PSR2" 
       showSniffs="true" 
       showWarnings="true"> 
      <fileset refid="sourceWithTests"/> 
      <formatter type="default" usefile="false"/> 
      <formatter type="checkstyle" outfile="${basedir}/build/logs/checkstyle-codesniffer.xml"/> 
     </phpcodesniffer> 
    </target> 

    <target name="hphpa" description="HipHop's static analyzer" depends="prepare"> 
     <exec executable="wget" checkreturn="true"> 
      <arg line="https://phar.phpunit.de/hphpa.phar"/> 
     </exec> 
     <exec executable="php hphpa.phar" checkreturn="true"> 
      <arg line="--checkstyle ${basedir}/build/logs/checkstyle-hphpa.xml"/> 
      <arg line="${source}"/> 
     </exec> 
     <delete file="hphpa.phar"/> 
    </target> 

    <target name="phpdoc2" description="Generate API documentation using phpDox" depends="prepare"> 
     <phpdoc2 title="API Documentation" 
       destdir="${basedir}/build/docs" 
       template="responsive-twig"> 
      <fileset refid="sourceWithTests"/> 
     </phpdoc2> 
    </target> 

    <target name="phpcb" description="Aggregate tool output with PHP_CodeBrowser" depends="prepare"> 
     <exec executable="phpcb"> 
      <arg line="--log ${basedir}/build/logs 
       --source ${source} 
       --output ${basedir}/build/code-browser"/> 
     </exec> 
    </target> 

    <target name="composer" description="Installing dependencies" depends="prepare"> 
     <delete dir="${basedir}/vendor"/> 

     <composer command="install"> 
      <arg value="--dev"/> 
     </composer> 
    </target> 

    <target name="doctrine" description="Building Database/Doctrine" depends="prepare"> 
     <copy file="${basedir}/config/autoload/local.php.test" tofile="${basedir}/config/autoload/local.php" 
       haltonerror="true"/> 
     <delete dir="${basedir}/data/db/"/> 
     <mkdir dir="${basedir}/data/db/"/> 
     <chmod file="${basedir}/data/db/" mode="777"/> 

     <exec executable="${basedir}/vendor/bin/doctrine-module"> 
      <arg value="orm:schema-tool:create"/> 
     </exec> 

     <delete dir="${basedir}/data/DoctrineORMModule/Proxy"/> 
     <mkdir dir="${basedir}/data/DoctrineORMModule/Proxy"/> 

     <exec executable="${basedir}/vendor/bin/doctrine-module"> 
      <arg value="orm:generate-proxies"/> 
     </exec> 

     <exec executable="${basedir}/vendor/bin/doctrine-module"> 
      <arg value="data-fixture:import"/> 
     </exec> 

    </target> 

    <target name="build" 
      depends="lint,pdepend,phpcs,phpcpd,phpmd,hphpa,phpdoc2,composer,doctrine,phpunit,phpcb"/> 
</project> 

некоторых целей (например, PHPUnit, phpmd и phploc) работать нормально, но другие не? Например. когда я бегу phpcpd я получаю эту ошибку:

Execution of target "phpcpd" failed for the following reason: /home/munnik/Sites/SolExactConnector/trunk/build.xml:83:16: /home/munnik/Sites/SolExactConnector/trunk/build.xml:83:16: PHPCPDTask depends on PHPCPD being installed and on include_path.

BUILD FAILED /home/munnik/Sites/SolExactConnector/trunk/build.xml:83:16: /home/munnik/Sites/SolExactConnector/trunk/build.xml:83:16: PHPCPDTask depends on PHPCPD being installed and on include_path. Total time: 0.1250 seconds

Мне нужно добавить композитор автозагрузку или что-то подобное, что делать?

+2

кажется Phing приобретает пакеты устанавливаются с помощью PEAR. Различные проверки в разных задачах проверяют пути PEAR и не проверяют пути композитора. Я думаю, что это ошибка в Phing. –

ответ

21

Чтобы использовать композитор автозагрузчика вместо глобальных пакетов PEAR вы можете добавить следующую строку в начале вашего build.xml:

<php expression="include('vendor/autoload.php')"/> 

Это помогло мне с PHPUnit (я не имею глобальную установку PEAR PHPUnit). Подумайте, это поможет вам успешно загрузить все ваши пакеты композиторов.

+0

Это не помогает с phpDoc – yegor256

+0

Важно отметить, что выражение '' является тегом, который находится внутри верхнего тега '' - это может быть не очевидно для людей, не имеющих опыта Phing , – Guss

1

Чтобы установить композитор автозагрузчика вы можете создать объект как:

<target name="require.autoload"> 
    <adhoc><![CDATA[ 
    require_once 'lib/composer/autoload.php'; 
]]></adhoc> 
</target> 

Тогда все цели, которые нуждаются в автозагрузчик, имеет это требование

<target name="test.coverage.html" depends="require.autoload"> 

Примечание: требуется после того, как файл, помещенный в

"config": { 
      "vendor-dir": "lib/composer" 
1

Я столкнулся с точно такой же проблемой lem, но не удавалось модифицировать автозагрузчики. Я решил поработать, создав для этого задачи <exec>. Разница между потерями вложенных <fileset> элементов невелика, их нужно указывать вместо аргументов.

3

Phing теперь предоставляет autoloader task, который вы можете использовать, чтобы включить свой автозагрузчик или автозагрузчик композитора.

Например:

<autoloader autoloaderpath="vendor/autoload.php"/> 
Смежные вопросы