Cha*_*lie 11 build go dependency-management
我正在尝试在我们的 CI 中调试以下构建错误,其中“A 依赖于 B,它无法构建,因为它依赖于 C。” 我正在构建不直接依赖于 kafkaAvailMonitor.go 的数据服务,这使得此错误难以追踪。换句话说:
数据(我正在构建的)取决于(?),这取决于 kafkaAvailMonitor.go
对于开发人员来说,修复他们只是“去做任何事情”似乎微不足道,但作为发布过程的一部分,我不能这样做 - 我必须找到添加依赖项的人并要求他们修复它。
我知道有一些工具可以可视化依赖树和其他更复杂的构建系统,但这似乎是一个非常基本的问题:有什么方法可以查看完整的依赖树以查看导致构建问题的原因吗?
go build -a -v
../../../msgq/kafkaAvailMonitor.go:8:2: cannot find package
"github.com/Shopify/sarama/tz/breaker" in any of:
/usr/lib/go-1.6/src/github.com/Shopify/sarama/tz/breaker (from $GOROOT)
/home/jenkins/go/src/github.com/Shopify/sarama/tz/breaker (from $GOPATH)
/home/jenkins/vendor-library/src/github.com/Shopify/sarama/tz/breaker
/home/jenkins/go/src/github.com/Shopify/sarama/tz/breaker
/home/jenkins/vendor-library/src/github.com/Shopify/sarama/tz/breaker
Run Code Online (Sandbox Code Playgroud)
Bry*_*yan 15
使用模块时,您可能能够从go mod graph.
usage: go mod graph
Graph prints the module requirement graph (with replacements applied)
in text form. Each line in the output has two space-separated fields: a module
and one of its requirements. Each module is identified as a string of the form
path@version, except for the main module, which has no @version suffix.
Run Code Online (Sandbox Code Playgroud)
即,对于原始问题,运行go mod graph | grep github.com/Shopify/sarama然后更仔细地查看左侧的每个条目。
Von*_*onC 10
如果以下不是堆栈跟踪,那是什么?
它是 Go 正在寻找丢失的包的路径列表。
我不知道谁在导入 kafkaAvailMonitor.go
它不是“导入”的,只是源代码的一部分并已编译。
除非它无法编译,因为它需要github.com/Shopify/sarama/tz/breaker, 不在GOROOT或 中GOPATH。
不过,请检查您的直接包装上go list会返回什么,看看是否kafkaAvailMonitor提到了。
go list可以显示您的包直接依赖的包,或其完整的传递依赖集。
% go list -f '{{ .Imports }}' github.com/davecheney/profile
[io/ioutil log os os/signal path/filepath runtime runtime/pprof]
% go list -f '{{ .Deps }}' github.com/davecheney/profile
[bufio bytes errors fmt io io/ioutil log math os os/signal path/filepath reflect run
Run Code Online (Sandbox Code Playgroud)
然后,您可以编写 go list 脚本以列出所有依赖项。例如,
请参阅Noel Cower ( ) 的这个 bash 脚本nilium
#!/usr/bin/env bash
# Usage: lsdep [PACKAGE...]
#
# Example (list github.com/foo/bar and package dir deps [the . argument])
# $ lsdep github.com/foo/bar .
#
# By default, this will list dependencies (imports), test imports, and test
# dependencies (imports made by test imports). You can recurse further by
# setting TESTIMPORTS to an integer greater than one, or to skip test
# dependencies, set TESTIMPORTS to 0 or a negative integer.
: "${TESTIMPORTS:=1}"
lsdep_impl__ () {
local txtestimps='{{range $v := .TestImports}}{{print . "\n"}}{{end}}'
local txdeps='{{range $v := .Deps}}{{print . "\n"}}{{end}}'
{
go list -f "${txtestimps}${txdeps}" "$@"
if [[ -n "${TESTIMPORTS}" ]] && [[ "${TESTIMPORTS:-1}" -gt 0 ]]
then
go list -f "${txtestimps}" "$@" |
sort | uniq |
comm -23 - <(go list std | sort) |
TESTIMPORTS=$((TESTIMPORTS - 1)) xargs bash -c 'lsdep_impl__ "$@"' "$0"
fi
} |
sort | uniq |
comm -23 - <(go list std | sort)
}
export -f lsdep_impl__
lsdep_impl__ "$@"
Run Code Online (Sandbox Code Playgroud)
小智 10
我只想在这里提一下,这go mod why也可以提供帮助。无论如何,你无法获取并显示整棵树。但是您可以追溯到子依赖项的一个分支,直到其父根。
例子:
$ go mod why github.com/childdep
# github.com/childdep
github.com/arepo.git/service
github.com/arepo.git/service.test
github.com/anotherrepo.git/mocks
github.com/childdep
Run Code Online (Sandbox Code Playgroud)
这意味着,您最终已在“anotherrepo.git/mocks”中导入了“childdep”。
小智 8
可以尝试这个https://github.com/vc60er/deptree
\n redis git:(master) go mod graph | deptree -d 3\npackage: github.com/go-redis/redis/v9\ndependence tree:\n\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80 github.com/cespare/xxhash/v2@v2.1.2\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 github.com/dgryski/go-rendezvous@v0.0.0-20200823014737-9f7001d12a5f\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 github.com/fsnotify/fsnotify@v1.4.9\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 golang.org/x/sys@v0.0.0-20191005200804-aed5e4c7ecf9\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 github.com/nxadm/tail@v1.4.8\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 github.com/fsnotify/fsnotify@v1.4.9\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 golang.org/x/sys@v0.0.0-20191005200804-aed5e4c7ecf9\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 gopkg.in/tomb.v1@v1.0.0-20141024135613-dd632973f1e7\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 github.com/onsi/ginkgo@v1.16.5\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 github.com/go-task/slim-sprig@v0.0.0-20210107165309-348f09dbbbc0\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 github.com/davecgh/go-spew@v1.1.1\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 github.com/stretchr/testify@v1.5.1\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ...\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
12749 次 |
| 最近记录: |