Eclipse PDT - 文件系统变化或新的Composer自动加载路径破坏了自动加载器。

问题描述 投票:0回答:1

我正在用Composer做一个项目 使用Eclipse PDT然而,每次我在composer自动加载基础目录下的目录中添加文件时,phpunit测试运行器就找不到我的文件了。

至少有2次我做了一些调整,让它重新工作,但似乎每次我改变文件系统时它都会崩溃。我希望Composer的自动加载器能找到我的文件,不管fs的变化。

这是我最新的自动加载器配置。

{
    "name": "someone/webapp",
    "description": "",
    "require-dev":  {
        "phpunit/phpunit":"~9.0",
        "squizlabs/php_codesniffer": "~3.0"
    },
    "require": {
        "doctrine/orm": "~2.7"
    },
    "autoload" : {
        "psr-4": {
            "WebApp\\": "src/"
         }
    },
    "autoload-dev" : {
        "psr-4": {
            "WebApp\\Tests\\" : "tests/"
        }
    }
}

我之前用PSR -0标准试过我的自动加载器。

{
     "name": "srmes/shopping-app-test",
     "description": "Developer test. Basic OO-orientated PHP webapp",
     "require-dev": {
        "phpunit/phpunit":"~9.0",
        "squizlabs/php_codesniffer": "~3.0"
     },
     "require": {
         "doctrine/orm": "~2.7"
     },
    "autoload" : {
         "classmap": ["src/", "src/Models/"],
         "psr-0": {
             "WebApp\\": "src/",
             "WebApp\\Models\\": "src/Models/"
         }
    },
    "autoload-dev" : {
         "classmap": ["tests/", "tests/Models/"],
         "psr-0": {
             "WebApp\\Tests\\" : "tests/"
         }
    }
}

我的问题是关于在自动加载目录中添加文件的问题. 我的目录结构是这样的。

someone/webapp
|-vendor
| |-MISC_PACKAGES
|- src --autoloader base dir
| |-Models
| | |-Product.php
| | |-Furniture.php
| |- IComparable.php -- THIS WAS ADDED, BREAKING AUTOLOADER
|- tests -- autoloader base dir
| |- Models
| | |- FurnitureTest.php
| | |- IProductTest.php
| |-bootstrap.php

我的目录结构是这样的:"编辑

如我下面的评论所示,我发现这个问题与Eclipse PDT自动完成只有在提交到git后才会工作的问题有关,随后新的composer require 语句等,这对我来说不是很理想,因为我想在投入之前先体验一下打包师包。

php filesystems require autoload
1个回答
1
投票

ComposerPHPUnit问题

你的问题与Eclipse PDT本身无关。在你的composer中,你注册了classmap和PSR-0。Classmap 要求 composer 重新扫描你的目录以找到新的类[1]。

PSR-4在你的src目录下就足够了。如果你在 srcServiceFoo.php 中创建 WebApp\Service\Foo 类,自动加载器(例如 phpunit)会找到它。

警告: 如果你使用 "optimize-autoloader": true 或运行 composer install--optimize-autoloader 或用dump-autoload --optimize 你的PSR4PSR-0将被转换为classmap !!!

我假设你正确地将 composer autoloder 注册为 phpunit bootstrap。

Eclipse PDT问题

你不需要每次都移除对composer的支持,但是由于你在eclipse之外运行composer更新,你必须在每次更新后执行额外的任务。composer installcomposer update:

  1. F5(刷新)项目以确保eclipse与文件系统同步。如果你启用了自动同步,就会正常工作。
  2. 右边 click on project -> composer -> update build path
  3. 有时还需要进行项目清理

自动同步暂时不能用,请看我的bug:bugs.eclipse.orgbugsshow_bug.cgi?id=515742。

[1] - https:/getcomposer.orgdoc04-schema.md#classmap。

© www.soinside.com 2019 - 2024. All rights reserved.