Composer does not generate autoloader information (autoload_namespaces.php)
autoload, composer-php, json, php, psr-0
Solution
If you try to install a private library/package via the "repositories" node of `composer.json` you have to re-specify the "autoload" node as well apparently.
{
"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/"
}
}
}]
}
I just spent a couple of hours figuring this out. Good job, Composer!
Problem
I have trouble getting a project correctly installed through composer. I have a own custom package (library) hosted in a non public git repo (but centralized) which is fetched by composer (dummy project containing a composer.json just for testing my package). So the structure is like that: ``` /test/project/composer.json index.php ``` Content of 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" } } ``` So when i run the composer install "php composer.phar install" within the folder containing the test-project and the composer.json you see above - everything seems to be fine - but - the autoloader information is missing - the map (array) in "autoload_namespaces.php" (files getting generated) keeps empty. I assumed that when i install a package with composer and the package (in my case the package foo/bar) contains a composer.json file - this file is also executed/processed during installation and the information for autoloading is taken from this (package) composer.json file. Am i right? Or am i doing something wrong? Here is the content of the "composer.json" file from package foo/bar: ``` { "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" }] } ``` As the result of the configuration(s) above i want the autoloading information like this: ``` $data = array( 'Foo' => $vendorDir . '/foo/bar/Framework' ); ``` If i insert this line "'Foo' => ..." manually everything works fine. But i can't figure out why this information isn't written by composer to the "autoload_namespaces.php" file. Thanks for any help :)