Composer不生成自动加载程序信息(autoload_namespace.php)

Composer不生成自动加载程序信息(autoload_namespace.php),php,json,composer-php,autoload,psr-0,Php,Json,Composer Php,Autoload,Psr 0,我无法通过composer正确安装项目。我有一个自己的定制包(库),托管在一个非公共的git repo(但是是集中式的)中,它由composer获取(虚拟项目包含一个composer.json,仅用于测试我的包) 所以结构是这样的: composer.json的内容: { "name": "vendor/test", "description": "Test-description", "authors": [{ "name": "Benjamin C

我无法通过composer正确安装项目。我有一个自己的定制包(库),托管在一个非公共的git repo(但是是集中式的)中,它由composer获取(虚拟项目包含一个composer.json,仅用于测试我的包)

所以结构是这样的:



composer.json的内容:

{
    "name": "vendor/test",
    "description": "Test-description",
    "authors": [{
        "name": "Benjamin Carl",
        "email": "email@testdomain.com",
        "homepage": "http://www.testdomain.com",
        "role": "Developer"
    }],
    "keywords": [
        "foo",
        "bar"
    ],
    "homepage" : "http://www.testdomain.com/",
    "license" : [
        "The BSD License"
    ],
    "repositories": [{
        "type": "package",
        "package": {
            "name": "foo/bar",
            "version": "0.0.1",
            "source": {
            "url": "git@git.testdomain.local:benjamin.carl/bar.git",
                "type": "git",
            "reference": "master"
    }
        }
    }],
    "require": {
        "foo/bar": "0.0.1"   
    }
}

因此,当我在包含测试项目和上面看到的composer.json的文件夹中运行composer install“php composer.phar install”时,一切似乎都很好,但是自动加载程序信息丢失,“autoload_namespace.php”(生成的文件)中的映射(数组)保持为空

我假设,当我安装带有composer的软件包时,该软件包(在我的例子中是包foo/bar)包含一个composer.json文件——该文件在安装过程中也会执行/处理,自动加载的信息取自该(软件包)composer.json文件。我说得对吗?还是我做错了什么


以下是来自包foo/bar的“composer.json”文件的内容:

{
    "name": "foo/bar",
    "description": "foo - the project for all bars out there.",
    "authors": [{
        "name": "Benjamin Carl",
        "email": "email@testdomain.com",
        "homepage": "http://www.testdomain.com",
        "role": "Developer"
    }],
    "keywords": [
    "php",
        "foo",
    "bar",
        "baz"
    ],
    "homepage": "http://testdomain.com/",
    "license": [
        "The BSD License"
    ],
    "require": {
        "php": ">=5.3.0"
    },
    "autoload": {
        "psr-0": {
        "Foo": "Framework/"
    }
    },
    "include-path": ["Framework/"],
    "support": {
        "email": "email@testdomain.com",
        "issues": "https://testdomain.com/issues",
    "wiki": "https://testdomain.com/wiki"
    },
    "repositories": [{
        "type": "vcs",
    "url": "https://git.testdomain.local/test/bar.git"
    }]
}

由于以上配置,我希望自动加载信息如下:

$data = array(
    'Foo' => $vendorDir . '/foo/bar/Framework'
);
如果我手动插入这一行“'Foo'=>…”,一切正常。但我不明白为什么composer没有将这些信息写入“autoload_namespaces.php”文件


感谢您的帮助:)

您的包
foo/bar
已声明了
包含路径。根据文档(请参阅),此功能已被弃用,只应用于支持无法自动加载的旧代码


我认为这是您的软件包没有被添加到自动加载的原因,因为它也可以通过include path加载(这是一件坏事,因为它对性能的影响太大了-不惜一切代价避免它)。

如果您试图通过“存储库”安装私有库/软件包
composer.json的节点也必须重新指定“autoload”节点

{
  "repositories": [{
    "type": "package",
    "package": {
      "name": "foo/bar",
      "version": "0.0.1",
      "source": {
        "url": "git@git.testdomain.local:benjamin.carl/bar.git",
        "type": "git",
        "reference": "master"
      },
      "autoload": {
        "psr-0": {
        "Foo": "Framework/"
      }
    }
  }]
}

我只是花了几个小时才弄明白。干得好,作曲家

Zacharydanger解决方案适用于需要软件包而不更改默认安装路径(即
供应商
文件夹)的情况

如果使用
composer/installer path
并在供应商文件夹外安装软件包,则需要相应地设置自动加载路径

{
  "repositories": [{
    "type": "package",
    "package": {
      "name": "foo/bar",
      "version": "0.0.1",
      "source": {
        "url": "git@git.testdomain.local:benjamin.carl/bar.git",
        "type": "git",
        "reference": "master"
      },
      "extra": {
        "installer-paths": {
          "core/{$name}": [
            "type:git-package"
          ]
        }
      },
      "autoload": {
        "psr-0": {
        "Foo": "core/Framework/"
      }
    }
  }]
}

您能否显示库的完整目录结构,包括源代码所在的位置?(或其模糊版本)。我用当前的acvtive版本试用了一下,效果很好!非常感谢您分享您的知识:)非常烦人的问题。我最终在packagist.org上启动了我的包,并运行了
composer require[package name]
。这也将解决这个问题。
{
  "repositories": [{
    "type": "package",
    "package": {
      "name": "foo/bar",
      "version": "0.0.1",
      "source": {
        "url": "git@git.testdomain.local:benjamin.carl/bar.git",
        "type": "git",
        "reference": "master"
      },
      "extra": {
        "installer-paths": {
          "core/{$name}": [
            "type:git-package"
          ]
        }
      },
      "autoload": {
        "psr-0": {
        "Foo": "core/Framework/"
      }
    }
  }]
}