我有一个项目结构如下:-
session-service
_libs //Contains all the external dependencies
api
constants
exceptions
idgen
jsonDecoder
log
model
monitor
persistence
redis
routes
src/bddtest/servicetest
util
_libs
的内容如下:
github.com
golang.org
x
net
gopkg.in
我的Makefile
看起来如下:-
.PHONY: deploy
LOGLEVEL ?= 1
CONFIGFILE ?= 2
GOFLAGS ?= $(GOFLAGS:)
PWD = $(shell pwd)
export GOPATH = $(shell echo $$GOPATH):$(PWD)/_libs:$(PWD)
export GOBIN = $(PWD)/bin
export GOROOT = $(shell echo $$GOROOT)
deploy: clean build install
build:
@rm -rf pkg/ 2>/dev/null
@rm -rf _libs/pkg/ 2>/dev/null
@go build $(GOFLAGS) ./...
install:
@go install ./...
clean:
@go clean $(GOFLAGS) -i ./...
## EOF
一切都很好。现在我正在考虑搬到vendor
。因此,我将我的_libs
重命名为vendor
,并修改了我的Makefile
如下:
export GOPATH = $(shell echo $$GOPATH):$(PWD)
但在这之后,我开始犯以下错误:-
vendor/golang.org/x/net/html/charset/charset.go:20:2: cannot find package "golang.org/x/text/encoding" in any of:
/Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/encoding (vendor tree)
/usr/local/go/src/golang.org/x/text/encoding (from $GOROOT)
/Users/debraj/golang/src/golang.org/x/text/encoding (from $GOPATH)
/Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/encoding
vendor/golang.org/x/net/html/charset/charset.go:21:2: cannot find package "golang.org/x/text/encoding/charmap" in any of:
/Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/encoding/charmap (vendor tree)
/usr/local/go/src/golang.org/x/text/encoding/charmap (from $GOROOT)
/Users/debraj/golang/src/golang.org/x/text/encoding/charmap (from $GOPATH)
/Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/encoding/charmap
vendor/golang.org/x/net/html/charset/charset.go:22:2: cannot find package "golang.org/x/text/encoding/htmlindex" in any of:
/Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/encoding/htmlindex (vendor tree)
/usr/local/go/src/golang.org/x/text/encoding/htmlindex (from $GOROOT)
/Users/debraj/golang/src/golang.org/x/text/encoding/htmlindex (from $GOPATH)
/Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/encoding/htmlindex
vendor/golang.org/x/net/html/charset/charset.go:23:2: cannot find package "golang.org/x/text/transform" in any of:
/Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/transform (vendor tree)
/usr/local/go/src/golang.org/x/text/transform (from $GOROOT)
/Users/debraj/golang/src/golang.org/x/text/transform (from $GOPATH)
/Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/transform
vendor/golang.org/x/net/http2/h2i/h2i.go:38:2: cannot find package "golang.org/x/crypto/ssh/terminal" in any of:
/Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/crypto/ssh/terminal (vendor tree)
/usr/local/go/src/golang.org/x/crypto/ssh/terminal (from $GOROOT)
/Users/debraj/golang/src/golang.org/x/crypto/ssh/terminal (from $GOPATH)
/Users/debraj/golang/src/b/m/session-service/src/golang.org/x/crypto/ssh/terminal
环境:-
有谁能让我知道为什么我在vendor
中得到了上面的错误,但是_libs
的一切都很好
更新
在我的本地,$(go list ./... | grep -v /vendor/)
输出中的换行符引起了一些问题。为了解决这个问题,我必须修改jimb
的解决方案。我在Makefile
PKG = $(shell go list ./... | grep -v /vendor/ | tr "\n" " ")
中引入了一个变量,然后在go install
& go build
中使用了这个变量,比如@go build $(GOFLAGS) $(PKG)
。
发布于 2017-01-11 19:40:13
_libs
目录以_
开头,并被go
工具忽略。当您将包移动到vendor/
时,./...
通配符现在包含供应商目录中的所有包。
您应该显式列出要安装的包,而不是依赖./...
通配符。如果仍然希望使用通配符行为,则可以使用go list ./...
并筛选其路径中包含vendor/
目录的任何包。根据您的具体需要,这可能非常简单,如:
go install $(go list ./... | grep -v vendor/)
https://stackoverflow.com/questions/41589384
复制相似问题