【问题标题】:Installing a go module fails with `invalid: module contains a go.mod file, so major version must be compatible`安装 go 模块失败并显示“无效:模块包含 go.mod 文件,因此主要版本必须兼容”
【发布时间】:2019-09-23 16:26:12
【问题描述】:

我正在尝试从 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 文件中有一些要求

但我不确定要实际下载该模块需要做什么。

【问题讨论】:

  • 是的,看起来他们已经完全破坏了作为库导入的存储库(尽管它似乎不打算作为库导入)。正如 Jim 链接的页面所示,主要版本更改需要更改路径(即对于 v2.x,路径应为 github.com/jenkins-x/jx/v2)。
  • 补充说的内容,您似乎想对jenkins-x 进行一些黑客攻击。如果是这种情况,我建议克隆该存储库,对其进行更改,然后从源代码构建您自己的自定义二进制文件。 jenkins-x contribution guidelines 应该可以帮助您
  • 问题是我希望创建一个直接调用 jx 函数的 Web 服务器,我已经用 bash / python 混合编写了它,但是安装一个装有 jx 的容器来运行 cobra 命令似乎很麻烦而不是直接调用函数,所以我希望在 go 中重写它。

标签: go jenkins-x


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    这是基于semantic import paths:

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

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

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

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

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

    但是jenkins-x/jx 版本的jenkins-x/jx 项目的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 的依赖关系

    【讨论】:

      猜你喜欢
      • 2021-08-18
      • 1970-01-01
      • 2020-11-17
      • 2018-11-03
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 2021-10-28
      相关资源
      最近更新 更多