我正在尝试引入 Go 供应商(将依赖项存储在名为的文件夹中)vendor
) 到现有的 App Engine 项目。我已将所有依赖项存储在供应商文件夹中(使用 Godep 作为助手),它看起来是正确的,但在本地运行应用程序时出现以下错误:
go-app-builder: Failed parsing input: package "golang.org/x/net/context" is imported from multiple locations: "/Users/erik/go/src/github.com/xyz/abc/vendor/golang.org/x/net/context" and "/Users/erik/go/src/golang.org/x/net/context"
我相信这两个位置应该解析为相同的位置,因为 Go 应用程序应该在vendor
首先文件夹。有没有办法让 Appengine 理解这两个依赖项是相同的?
您的项目目录(app.yaml 所在的位置)可能位于 GOPATH/src 中。
不应该的。
go-app-builder 将获取 app.yaml 文件夹(及下面)中的所有内容,并将您的 GOPATH 合并到其中,这意味着现在您拥有它两次。
解决方案是将 app.yaml 从 GOPATH/src 文件夹中移出。
另外你会发现goapp test
工作方式不同于goapp serve
and goapp deploy
当涉及到解决依赖关系时。
所以这是我一直在使用的解决方案(已经有一段时间没有使用 golang 应用程序引擎了),这是我发现的唯一可以正常工作的设置goapp
命令和govendor
正常工作(不确定godep
)
/GOPATH
├──/appengine
| ├── app.yaml
| └── aeloader.go
└──/src
└── /MYPROJECT
├── main.go
├── /handler
| └── handler.go
└── /vendor
details:
file: GOPATH/appengine/aeloader.go (NOTE the init function is necessary, probably a bug though)
package mypackage
import (
_ "MYPROJECT"
)
func init() {
}
now run goapp serve
and goapp deploy
from ../GOPATH/appengine/
and goapp test ./...
from ../GOPATH/src/MYPROJECT
附:我发现全局 GOPATH 很愚蠢,只需将我的 GOPATH 设置为当前项目文件夹(在上面的示例中)/GOPATH
)并将整个事情检查到版本控制中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)