如何解决如何强制 go mod 接受声明其路径与其 go.mod 不同的模块?
当我运行“go mod tidy”时它会中断,因为我的项目导入的包使用路径“github.com/coreos/bbolt”导入了另一个包,但是当它从这个路径获取包时,它的 go.mod 说它路径是“go.etcd.io/bbolt”。
问题是导入包和导入包都是第三方包。我知道我可以编辑 go 模块缓存来修复它,但是当这些包的新版本可用时,修复它真的很麻烦。
部分回显消息如下所示:
github.com/coreos/etcd/client tested by
github.com/coreos/etcd/client.test imports
github.com/coreos/etcd/integration imports
github.com/coreos/etcd/etcdserver imports
github.com/coreos/etcd/mvcc/backend imports
github.com/coreos/bbolt: github.com/coreos/bbolt@v1.3.5: parsing go.mod:
module declares its path as: go.etcd.io/bbolt
but was required as: github.com/coreos/bbolt
那么,我该如何解决或解决这种情况?
解决方法
您可以使用 replace directive
修复此解决方案只需添加:
replace github.com/coreos/bbolt v1.3.5 => go.etcd.io/bbolt v1.3.5
在您的 go.mod
文件末尾
您也可以在命令行中使用 replace 指令,例如:
go mod edit -replace github.com/pselle/bar=/Users/pselle/Projects/bar
,
不匹配的路径意味着您的依赖项 (github.com/coreos/etcd/mvcc/backend
) 是针对旧版本的 bbolt
存储库编写的 - 早于 commit e65d4d。
我注意到 github.com/etcd-io/etcd
存储库中的 current go.mod
file 将其模块路径指定为 go.etcd.io/etcd/v3
。
因此,对您来说最可靠的修复方法可能是更新到该路径,您可以通过更改 import
语句以引用新的规范导入路径并运行 go mod tidy
来更新您的依赖项来实现相应地:
sed -i s,github.com/coreos/etcd,go.etcd.io/etcd/v3,g $(find . -name '*.go')
go mod tidy
除此之外,您可以明确选择与旧导入路径匹配的 github.com/coreos/bbolt
版本。我注意到 https://beta.pkg.go.dev/github.com/etcd-io/bbolt?tab=versions 中列出的该模块的最高版本是 v1.3.3
,而 v1.3.4
似乎添加了 a go.mod
file with the updated path。因此,作为后备,您可以尝试:
go get -d github.com/coreos/bbolt@v1.3.3
这种方法的缺点是 v1.3.3
是行尾:在那之后您将无法引入错误修复,因为这些修复都在 go.etcd.io
路径。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。