繁体   English   中英

安装 go 模块失败并显示“无效:模块包含 go.mod 文件,因此主要版本必须兼容”

[英]Installing a go module fails with `invalid: module contains a go.mod file, so major version must be compatible`

我正在尝试从 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

我明白了

... 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

这是因为 jx 在其 mod 文件中有一些要求

但我不确定我必须做什么才能实际下载该模块。

对于任何希望使用一些简洁的 Jenkins-x 函数进行编译的人,我能够与创建者交谈并发现了一些事情。

  1. Go 1.12.4
  2. 看看他们的灯塔项目,它有一个go.mod并使用 jenkins-x/jx 作为要求
  3. 正如评论中提到的,一旦项目高于主要版本 1,基本上 go.mod 使用0.0.0-timestamp-commithash

当您尝试获取主要版本等于或高于v2的模块,但它们自己的go.mod文件或您的导入路径缺少必要的/vN后缀时,会发生此错误。

这是基于语义导入路径

如果模块是 v2 或更高版本,则模块的主要版本必须作为/vN包含在 go.mod 文件中使用的模块路径的末尾

使用您的示例,此命令失败并出现您的问题中的错误:

go get github.com/jenkins-x/jx@v2.0.383

如果您需要v2.xx ,那么您必须将模块获取为(注意@之前末尾的/v2 ):

go get github.com/jenkins-x/jx/v2@v2.0.383

但是jenkins-x/jx项目v2.0.383版本的go.mod文件将模块路径声明为module github.com/jenkins-x/jx ,所以你仍然无法使用/v2获取它,因为它们不要这样声明。 它将失败:

github.com/jenkins-x/jx/v2@v2.0.383:go.mod 具有非.../v2 模块路径“github.com/jenkins-x/jx”(和.../v2/go. mod 不存在)在版本 v2.0.383

这在以后的版本中得到了修复。 您可以运行go get github.com/jenkins-x/jx/v2@latest将解析为v2.1.155

如您所见,这个问题可能不是您的错。 在这种情况下,您只能要求存储库维护人员修复他们的go.mod并遵守语义版本控制。

或者,您可以在本地克隆 repo 并使用replace指令,但这实际上只能在本地工作。


注意:如果项目是v2或更高版本并且它没有go.mod文件,则会导致依赖与+incompatible

在 go 中一个大版本 bump 必须确保导入路径与其他大版本不同。 v1版本不需要任何后缀,所有后续的主要版本 bump 都必须在模块名称中包含主要版本后缀。 在你的情况下应该是:

require github.com/jenkins-x/jx/v2 v2.0.383

然后在您的 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

但是您可能会遇到其他问题,因为该模块似乎不希望从其他模块中使用。

而且你也将自己升级这个包,go 工具将无法提升版本本身,因为它不知道当前版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM