【问题标题】:force a transitive dependency version in golang在 golang 中强制传递依赖版本
【发布时间】:2022-01-03 02:14:25
【问题描述】:

我对 golang 中的依赖项有疑问。 我的应用程序定义了一个这样的 go.mod:

module my.host.com/myapp

require (
    ext1.com/module1 v0.0.1
)

go 1.14

ext1.com/module1 依赖于 ext2.com/module2 v0.0.2,而后者又依赖于 ext3.com/module3 v0.0.3

安全扫描检测到 ext3.com/module3 v0.0.3 不安全,必须更新到 v0.0.4。 有没有办法“强制”myapp 只获取 repo3.com/module3 v0.0.4,覆盖 module2 v0.0.2 go.mod 中定义的指令? 假设 ext1.com/module1 v0.0.1 已经是最新版本,所以升级它不起作用。 “排除 ext3.com/module3 v0.0.3”也不起作用:构建成功(golang 1.17.2),但出现运行时错误。 “替换”会起作用吗?假设 ext2 v0.0.3 依赖于安全的 ext3 v0.0.4,我的意思是:

module my.host.com/myapp

require (
    ext1.com/module1 v0.0.1
)

replace ext2.com/module2 v0.0.2 => ext2.com/module2 v0.0.3

go 1.14

提前致谢!

【问题讨论】:

    标签: go dependencies


    【解决方案1】:

    运行go get -u ext3.com/module3@v0.0.4

    这会将模块升级到至少v0.0.4

    给定依赖main -> B -> C,当main需要比B更高版本的C时,选择更高版本,// indirect

    看到这个https://go.dev/ref/mod#go-mod-file-require

    如果 go 指令指定 go 1.16 或更低版本,则当所选模块的版本高于主模块的其他依赖项已经暗示的(传递性)版本时,go 命令会添加间接要求。 这可能是由于显式升级而发生的(go get -u ./...)

    我引用这部分是因为你的 go.mod 有 go 1.14

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 2019-12-29
      • 2019-04-07
      • 2015-04-03
      相关资源
      最近更新 更多