usiamo phing per costruire e testare il nostro progetto. Voglio rimuovere il più possibile le dipendenze su PEAR in modo da poter eseguire versioni diverse di pacchetti per diversi progetti. Ho creato un file composer.json che installare tutti i pacchetti necessariPhing and compositore
{
"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/"
}
}
e ho un build.xml phing
<?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>
Alcuni obiettivi (come PHPUnit, phpmd e phploc) gestita bene, ma altri non lo fanno? Per esempio. quando corro phpcpd ottengo questo errore:
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
Devo aggiungere l'autoload compositore o qualcosa del genere?
Sembra Phing assume pacchetti sono installati utilizzando PEAR. Varie verifiche in attività diverse verificano i percorsi PEAR e non controllano i percorsi del compositore. Penso che questo sia un bug in Phing. –