我遇到以下情况:GitHub和Packagist上有包author/package1
。我决定将它分成tcb13/package1
来添加一些代码(最终会合并到原始项目中,但这需要时间)。
后来,我开发了另一个包tcb13/package1-extension
,它通过将一些方法继承到新类来扩展fork tcb13/package1
...
在我的tcb13/package1-extension
,composer.json
我写道:
{
"name": "tcb13/package1-extension",
"description": "...",
"keywords": [
],
"homepage": "https://github.com/tcb13/package1-extension",
"license": "MIT",
"authors": [
],
"repositories":
[
{
"type": "vcs",
"url": "https://github.com/tcb13/package1/"
}
],
"require": {
"author/package1": "dev-master"
},
我告诉作曲家我的扩展程序包需要author/package1
并且还有一个aditional存储库https://github.com/tcb13/package1/
并将程序包版本设置为dev-master
,因此作曲家会从我的author/package1
下载tcb13/package1
修改后的fork,而不是原始的包...(如果我告诉它从tcb13/package1-extension
下载,它将无效。)
我将上面的代码提交给GitHub,并尝试在新项目上要求Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for tcb13/package1-extension dev-master -> satisfiable by tcb13/package1-extension[dev-master].
- tcb13/package1-extension dev-master requires `author/package1` dev-master -> no matching package found.
,作曲家说:
author/package1
为什么会出错?当我开发我的扩展程序包时,我能够dev-master
作为tcb13/package1-extension
,因为它指向我的fork repo,但是当我尝试require tcb13/package1
时,它似乎看起来不像为我的fork,并试图去寻找分支的原始项目...为什么?
另外,这是我应该使用forks作为依赖关系的方式吗?还有其他方法吗?我最初尝试将fork作为author/package1
但它会失败,但要求它Runtime.getRuntime().addShutdownHook(new Thread() {
override def run() {
println("shutting down spray")
IO(Http) ! Http.CloseAll
IO(Http) ! PoisonPill
system.shutdown();
}
})
也告诉作曲家我有一个额外的存储库工作到现在。
谢谢。
答案 0 :(得分:0)
我设法解决了这个问题。根据作曲家文档,这不是一个错误,它是由于安全性而在设计中发生的事情。
来自GitHub comment:
考虑一下:你有一个项目取决于我的一个包。 我依赖于对您的应用程序至关重要的包。我发生了 制作一个分叉来引入一个新功能并意外地标记一个 在我的composer.json中使用存储库发布。你碰巧更新了 你的包裹,并得到我的叉子,可能会破坏,绝对 不是你在定义包依赖时所期望的。
为了能够做我想做的事情,我不得不手动将最终项目tcb13/final-project
添加到author/package1
的分支的URL(就像我在{{1}上所做的那样) }),像:
tcb13/package1-extension
在{
"repositories":
[
{
"type": "vcs",
"url": "https://github.com/tcb13/package1/" // Fork of author/package1
},
{
"type": "vcs",
"url": "https://github.com/tcb13/package1-extension"
}
],
"require": {
"author/package1": "dev-master", // Reference to the original package, composer will fetch this from my fork defined above...
"tcb13/package1-extension": "dev-master" // My current extension package
}
}
之后,这一切都按预期工作。