revel package 命令必须传入完整 import path,如 github.com/yourname/myapp;生成的 main.go 非标准主程序,需 go build 编译,且须与 conf/、app/、public/ 等目录共存部署。

revel package 命令必须传入完整 import path
直接在项目根目录执行 revel package 会失败,报错类似 ERROR: app not found in GOPATH 或 Failed to import with error: import "": invalid import path。根本原因是 Revel 需要通过 import path 定位 conf/app.conf 和 app/ 包,而该路径必须与 go.mod 中的模块名或传统 GOPATH 下的物理路径严格一致。
实操要点:
- 若使用 Go Modules(推荐),确保项目根目录有
go.mod,且module行声明了完整路径,例如module github.com/yourname/myapp - 运行命令时,参数必须是该模块路径:
revel package github.com/yourname/myapp,不能是.、./或本地相对路径 - 若仍用 GOPATH 模式,项目必须放在
$GOPATH/src/github.com/yourname/myapp,且命令中路径需完全匹配(大小写、斜杠方向)
打包后生成的 main.go 不能直接 go run
执行 revel package 后,会在当前目录生成一个 main.go 文件——它不是标准 Go 主程序,而是 Revel 运行时的引导器,依赖 REVEL_IMPORT_PATH 等环境变量注入上下文。直接执行 go run main.go 必然触发空导入路径错误。
正确做法:
- 用
go build -o myapp .编译当前目录(含生成的main.go),得到可执行文件 - 编译前确保当前目录下有
conf/、app/、public/等 Revel 标准子目录,否则构建会缺资源 - Windows 用户注意:生成的二进制默认不带
.exe后缀,需手动加或用go build -o myapp.exe .
生产部署需手动补全资源目录结构
Revel 打包只生成 main.go 和部分配置骨架,不会自动复制 conf/、app/、public/、views/ 等目录。直接运行生成的二进制会提示 failed to load app.conf 或模板找不到。
必须手动处理:
- 将整个原始项目目录(含
conf/、app/、public/)与生成的二进制放在一起 - 或编写部署脚本(如
RevelDeploy.cmd),用xcopy或robocopy复制必要子目录 - 确认
conf/app.conf中的app.importPath与你实际运行时的模块路径一致,否则路由、静态资源、模板加载全失效
Go Modules 下 revel package 的兼容性陷阱
Revel v1.x 支持 Go Modules,但 revel package 命令本身并不读取 go.mod 自动推导路径——它仍按旧逻辑尝试解析 GOPATH。这意味着即使你用了 go mod init,命令仍可能 fallback 到 GOPATH 检查。
绕过方式:
- 显式设置环境变量:
GO111MODULE=on,并确保revelCLI 版本 ≥ v1.0.0(检查revel version) - 若仍报错,临时切换到 GOPATH 模式:把项目挪到
$GOPATH/src/下再执行revel package - 更稳妥的替代方案:放弃
revel package,改用纯 Go 构建 + 手动组织目录,即go build -o myapp .,然后自行管理资源路径
真正容易被忽略的是:打包不是“一键生成可运行文件”,而是“生成一个依赖完整项目结构的可执行体”。你得把它和 conf、app、public 当作一个整体来部署,而不是只拷一个二进制。











