我需要一个 xml 序列化器来运行在 php5 上的遗留应用程序。我尝试安装symfony/[email protected] ,这应该适用于我的环境。
看来不可能:
$ composer require symfony/serializer=v3.4.47
[...]
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Root composer.json requires symfony/serializer v3.4.47 -> satisfiable by symfony/serializer[v3.4.47].
- symfony/serializer v3.4.47 conflicts with symfony/serializer v3.4.47.
Installation failed, reverting ./composer.json and ./composer.lock to their original content.
实际上,当平台设置为 php 5 时,无法安装此软件包,因为每个兼容版本都与自身冲突。
- 是否有某种锁定来防止安装包含安全问题的软件包?
- 除了 fork 之外,是否可以强制 Composer 安装此类冲突的软件包?
编辑:
@Nico Haase 请求对更改前后的composer.json 进行比较。
以下是更改后的片段:
{
"name": "my/library",
"description": "I'll omit irrelevant and/or unchanged parts",
"config": {
"platform": {
- "php": "5.4.45"
+ "php": "5.6.40"
}
},
"require-dev": {
"phpunit/phpunit": "^4.8",
"wsdl2phpgenerator/wsdl2phpgenerator": "^3.4"
},
"require": {
"my/library1": "^221.0.2",
"my/library2": "dev-master",
"my/library3": "dev-master",
"my/library4": "dev-master",
"ext-soap": "*",
+ "ext-json": "*",
+ "symfony/serializer": "v3.4.47",
+ "symfony/property-access": "^3.4"
}
}
如您所见,更改之前不需要 symfony
软件包,因此我预计不会安装它。但它确实是,作为 wsdl2phpgenerator
的开发依赖项,而且它已经很老了。根据composer.lock,安装的版本是v2.8.52
。
Composer 软件包的全面更新以及 PHP 版本从 5.4(之前接触此库时使用的版本)到我们现在使用的 5.6,允许依赖项升级到兼容版本。
如果不是奇怪的 Composer 冲突消息,所有这一切都不会成为问题:
- symfony/serializer v3.4.47 conflicts with symfony/serializer v3.4.47.
我希望它会是这样:
- symfony/serializer v3.4.47 requires symfony/yaml v3.4.47
- symfony/yaml v3.4.7 confitcs with symfony/yaml v2.8.52
...或类似的东西,这会提示我更新依赖项的方向。
最佳答案
实际问题似乎与旧版本的 symfony/yaml 发生冲突。那些遗留应用程序...
我已经通过运行解决了问题:
$ composer update
[...]
- Upgrading symfony/yaml (v2.8.52 => v3.4.47)
然后我就可以成功require
serializer
包。
综上所述,如果一个包在同一版本中与自身发生冲突,那么它实际上可能与其在不兼容版本中已安装的依赖项发生冲突。
不过,Composer 错误消息没有帮助。
关于php - 为什么某些 Composer 软件包在同一版本中会相互冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73137773/