【发布时间】:2015-03-30 12:05:21
【问题描述】:
phpunit 已停止支持 PEAR 安装。这导致我们需要继续使用 phpunit 的 phar 安装。我们有一个包装脚本,它遍历许多目录并调用这些目录上的 phpunit 可执行文件。然后包装脚本将所有生成的报告合并到一个报告中。
当 phpunit 与 PEAR 一起安装时,我们需要在包装脚本顶部的唯一要求是
require 'PHP/CodeCoverage/Autoload.php';
然后,当包装脚本执行诸如
之类的操作时$writer = new PHP_CodeCoverage_Report_Clover();
$writer->process($codeCoverage, "${reportsDir}/clover-coverage.xml");
自动加载器会(大概)加载执行此代码所需的任何内容,然后我们会继续我们愉快的方式。
然而,自从迁移到 phar 安装后,事情变得一团糟。最初我以为我可以只需要 phar 文件本身,一切都会好起来的。
require 'phpunit-3.7.31.phar';
但是,这会导致 phar 文件在 require 行被命中后立即执行,从而中止包装脚本和 phpunit 使用输出。由于您不能在 php require 语句中使用通配符,因此我慢慢构建了完成包装脚本所需的文件列表,并像这样要求它们:
require 'phar://phpunit-3.7.31.phar/php-code-coverage/CodeCoverage/Report/Clover.php';
当我从它的目录执行包装脚本并且 phpunit.phar 文件位于同一目录中时,这有效。但是,尝试从不同的目录执行它会失败,说在包含路径上找不到 phar 文件。我试图更改包含路径,将 .phar 文件放在包含路径上已经存在的位置,并在包含中给出 phar 文件的绝对路径,例如:
require 'phar://actual/path/to/file/phpunit-3.7.31.phar/php-code-coverage/CodeCoverage/Report/Clover.php';
这些解决我的问题的尝试都没有奏效。
如何包含 .phar 文件中的文件,以使我可以从系统上的任何位置运行脚本?
另一个可接受的答案是让我使用 phar 文件中的类而不包括我需要的所有内容。
Ubuntu 12.04
PHPUnit 3.7.31(我们必须继续使用这个版本,但这并不会真正影响问题)
【问题讨论】:
-
为什么不直接打开包装?