kolize IOException s Phingem
- filda
- Člen | 8
Ahoj,
začli jsme používat Phing na buildování s pouštění testů, když
spouštím testy ošklivým způsobem:
<exec command="phpunit ... ... />
tak to sice funguje ale přicházím o jisté výhody. Zádrhel nastává když je chci spouštět hezkým způsobem:
<phpunit codecoverage="true" haltonerror="true">
...
...
</phpunit>
V tuhle chvíli dojde k chybě:
PHP Fatal error: Cannot redeclare class IOException in /lib/Nette/exceptions.php
on line 121
a to proto, že testy jsou takhle pouštěny v kontextu Phingu a ten má naneštěstí definovanou výjimku(výjimky, našel jsem ještě FileNotFoundException) stejnýho jména.
Přikládám i stacktrace
PHP Fatal error: Cannot redeclare class IOException in /var/lib/hudson/jobs/project/workspace/lib/Nette/exceptions.php on line 121
PHP Stack trace:
PHP 1. {main}() /usr/share/pear/phing.php:0
PHP 2. Phing::fire() /usr/share/pear/phing.php:37
PHP 3. Phing::start() /usr/share/pear/phing/Phing.php:270
PHP 4. Phing->runBuild() /usr/share/pear/phing/Phing.php:170
PHP 5. Project->executeTargets() /usr/share/pear/phing/Phing.php:543
PHP 6. Project->executeTarget() /usr/share/pear/phing/Project.php:689
PHP 7. Target->performTasks() /usr/share/pear/phing/Project.php:716
PHP 8. Target->main() /usr/share/pear/phing/Target.php:263
PHP 9. Task->perform() /usr/share/pear/phing/Target.php:240
PHP 10. PHPUnitTask->main() /usr/share/pear/phing/Task.php:253
PHP 11. BatchTest->getTestSuite() /usr/share/pear/phing/tasks/ext/phpunit/PHPUnitTask.php:254
PHP 12. BatchTest->elements() /usr/share/pear/phing/tasks/ext/phpunit/BatchTest.php:198
PHP 13. PHPUnitUtil::getDefinedClasses() /usr/share/pear/phing/tasks/ext/phpunit/BatchTest.php:175
PHP 14. Phing::__import() /usr/share/pear/phing/tasks/ext/phpunit/PHPUnitUtil.php:95
PHP 15. include_once() /usr/share/pear/phing/Phing.php:1017
PHP 16. require_once() /var/lib/hudson/jobs/project/workspace/_tests/phpUnit/AllTests.php:19
PHP 17. require_once() /var/lib/hudson/jobs/project/workspace/_tests/phpUnit/Perseus_TestCase.php:17
PHP 18. require_once() /var/lib/hudson/jobs/project/workspace/lib/Nette/loader.php:22
PHP 19. require_once() /var/lib/hudson/jobs/project/workspace/lib/Nette/Loaders/NetteLoader.php:22
PHP 20. require_once() /var/lib/hudson/jobs/project/workspace/lib/Nette/Loaders/AutoLoader.php:22
Nemáte někdo ponětí jak tuhle situaci vyřešit?
- David Grudl
- Nette Core | 8282
Zakomentováním definic výjimek v /lib/Nette/exceptions.php?
Tohle se blbě řeší. Na jednu stranu by Nette mohlo globální výjimky definovat jen podmíněně, pokud ještě neexistují, ale může snadno dojít k chybám při zpracování, protože třeba taková FileNotFoundException ma jiné rodiče v Nette a v Phing.
Druhou možností je výjimky prefixovat a zařadit do jmenného prostoru, případně i jejich počet redukovat. Nevyřeší to samozřejmě problém u verze PHP 5.2 neprefixované.
- filda
- Člen | 8
V první chvíli mě taky napadlo definovat je podmíněně jako je to třeba v dibi, ale právě rozdílnej předek mě od toho odrazuje.
Sice používáme prefixovanou verzi, ale nedávno jsme přešli na 5.3 takže tady by problém nebyl. Jenom se zeptám jestli je nějakej důvod k tomu aby Nette výjimky nebyly ve jmenným prostoru Nette. Kromě toho, že jsou pojmenovaný tak univerzálně, že tam vlastně bejt nemusí. I když kvůli tý univerzálnosti dochází k tomuhle problému.