使用 go get 获取第三方许可证

geo*_*eok 3 go

假设我们有一个go.mod定义第三方依赖项的文件。该语言是否有某种功能或方法可以最好在没有第三方工具的情况下获取第三方许可证列表?不幸的是,我无法分享任何代码,因为我还没有找到任何潜在的解决方案。

例如我们有:

module github.com/myGoProject

require (
    github.com/sirupsen/logrus v1.4.2
    github.com/stretchr/testify v1.2.2
)
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到输出:

麻省理工学院

麻省理工学院

Mar*_*k A 5

我最近也不得不这样做,但没有找到任何“官方”的做法。我使用了一个go-license-detector针对我的供应商提供的第三方依赖项调用的工具来自动化大部分工作。

  1. 安装https://github.com/src-d/go-license-detector。该工具扫描许可证文件的目录并确定它们(可能)是什么许可证。
  2. 通过运行下载所有第三方库依赖项的源代码go mod vendor。这会将您的依赖项的所有源代码放入名为“vendor”的目录中。
  3. cd 进入您的供应商目录并运行:

    license-detector `cat modules.txt |grep "^#" |cut -d' ' -f2`

这将license-detector针对每个下载的模块运行并输出每个模块的可能许可证列表。您将获得如下所示的输出:

github.com/influxdata/influxdb
    91% MIT
github.com/influxdata/platform
    99% MIT
    84% MIT-feh
github.com/kr/logfmt
    100%    Unlicense
    98% MIT
    93% JSON
    84% MIT-feh
Run Code Online (Sandbox Code Playgroud)

通常顶级许可证是正确的,但最好仔细检查每个许可证。

  • 谢谢。但是完整的依赖关系图不就是“go.sum”中的吗?`modules.txt` 似乎更接近包含(大部分)直接依赖项的 `go.mod`? (2认同)