我正在尝试从 Jenkins-X/jx 导入以自定义一些东西。
我真的很新来抬头
但试图go get ./...
失败。
我的 go.mod 文件
module github.com/my-org/my-project
go 1.13
require github.com/jenkins-x/jx v2.0.383
Run Code Online (Sandbox Code Playgroud)
我得到
... require github.com/jenkins-x/jx: version "v2.0.383" invalid: module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v2
Run Code Online (Sandbox Code Playgroud)
这是因为 jx 在它的 mod 文件中有一些要求
但我不确定要实际下载模块我必须做什么。
在Go中,大版本冲突必须确保导入路径与其他大版本不同。版本v1
不需要任何后缀,所有后续的主要版本升级都必须在模块名称中包含主要版本后缀。在你的情况下应该是:
require github.com/jenkins-x/jx/v2 v2.0.383
Run Code Online (Sandbox Code Playgroud)
然后在 go 源文件中使用的导入路径也应该指定这一点。您可以在此处获取有关此约定的更多信息https://github.com/golang/go/wiki/Modules#why-must-major-version-numbers-appear-in-import-paths
但一些模块作者不遵循此规则,这与 go 工具的预期不兼容。如果您对模块具有写访问权限,则应修复模块名称,以便主要版本出现在模块定义中。
对于这个特定的包,所有主要版本都没有在模块名称上添加所需的后缀。我想因为它是一个 CLI 工具,所以它不应该被其他模块使用。无论如何,如果您需要导入它,您可以通过指定与您想要依赖的标签相对应的提交 id 来解决:
go get github.com/jenkins-x/jx@c71c08508888ec
Run Code Online (Sandbox Code Playgroud)
但是您可能会遇到其他问题,因为该模块似乎不希望被其他模块消耗。
而且您也将自行升级此软件包,go 工具将无法升级版本本身,因为它不知道当前版本。