在Gradle的构建模型中,一个独立执行的任务单元称为Task。Gogradle预定义了以下任务:
- 通用任务
- goClean
- goPrepare
- showGopathGoroot
- 初始化任务
- goInit
- 依赖相关任务
- resolveBuildDependencies
- resolveTestDependencies
- installDependencies
- goDependencies
- goVenodr
- goLock
- 构建相关任务
- goBuild
- goTest
- goCoverage
- goVet
- gofmt
- goCheck
下面将对这些任务进行介绍。在开始前,我们假定你的项目的包路径是github.com/my/project
,你的系统环境是Windows x64。
清除项目中的临时文件,即.gogradle
目录。
进行一些准备工作,例如build.gradle
中配置的合法性校验、指定Go语言版本的下载与安装。
依赖goPrepare
任务。因为Gogradle支持项目级的GOPATH
和多Go版本的共存,此任务用于显示当前构建使用的GOPATH
和GOROOT
。
依赖goPrepare
任务。执行从其他包管理工具的迁移工作。当前支持的包管理工具有:glide/glock/godep/gom/gopm/govendor/gvt/gbvendor/trash/gpm
。
依赖goPrepare
任务,分别解析build
和test
的依赖,生成依赖树。在这个过程中会解决相关依赖之间的冲突。
内部任务,请勿使用。此任务检查resolveBuildDependencies/resolveTestDependencies
任务是否存在,并将相应的依赖扁平化后安装到vendor
中。其中build
依赖的优先级高于test
依赖。
依赖resolveBuildDependencies/resolveTestDependencies
任务,显示当前项目的依赖树。这对于包冲突的解决非常有用。
依赖resolveBuildDependencies/resolveTestDependencies/installDependencies
任务。将解析后的build
依赖和test
依赖合并后安装到vendor目录。详见依赖安装到vendor目录。
依赖goVendor
任务,生成依赖锁定文件。详见依赖锁定。
依赖resolveBuildDependencies/installDependencies
。执行构建工作,默认情况下等价于运行:
go build github.com/my/project -o .gogradle/windows_amd64_project
你可以按照自己的实际需求进行配置,如下:
goBuild {
// 交叉编译的输出选项,注意,要求go 1.5+
targetPlatform = ['windows-amd64', 'linux-amd64', 'linux-386']
// 输出文件的路径,可以是绝对路径(相对于项目目录)或者相对路径
// 其中的${}占位符会在交叉编译时被渲染
outputLocation = './.gogradle/${GOOS}_${GOARCH}_${PROJECT_NAME}${GOEXE}'
}
例如,上面的配置指明,需要进行三次交叉编译和构建,并生成相应的输出结果。这会在项目目录下的.gogradle
下生成三个文件:
- windows_amd64_project.exe
- linux_amd64_project
- linux_386_project
如果你的main
包并不在项目的根目录下,或者你希望添加一些自定义的命令行参数,你需要进行如下配置:
goBuild {
go 'build -o ./gogradle/output --my-own-cmd-arguments github.com/my/package/my/subpackage'
}
注意,go
后面的引号是必须的。
依赖resolveBuildDependencies/resolveTestDependencies/installDependencies
。执行测试工作。假定你的项目github.com/my/project
包含若干个子包github.com/my/project/sub1
/github.com/my/project/sub2
/.../github.com/my/project/subN
,Gogradle会对这N个包逐个执行测试和覆盖率检查,并生成HTML格式的测试报告。测试报告位于<project root>/.gogradle/reports/test
目录。目前,test
任务尚不支持自定义配置。
依赖goPrepare
任务。运行gofmt
,默认情况下,它会使用-w
修改项目中的文件。若不希望如此,或者想添加其他的参数,使用:
gofmt {
gofmt "-r '(a) -> a' -l *.go"
}
依赖goVendor
任务。运行go vet。默认情况下,若go vet
返回值非零,该任务会失败。由于go vet
可能不准确,可以使用以下配置忽略错误:
goVet {
continueOnFailure = true
}
依赖test
任务,生成测试报告,默认位于 <project root>/.gogradle/reports/coverage
通常该任务被CI系统调用,用于执行代码检查,例如覆盖率、代码风格等。默认依赖goTest任务、goVet任务和gofmt任务。
Gogradle支持自定义的go任务。详见自定义任务。
欲了解更多有关任务的信息,请参考官方文档。
在Gogradle 0.11.0之前,你可以通过-Dgogradle.alias=true
将默认的任务名build
/test
重命名为goBuild
/goTest
。从0.11.0开始,这个参数不再有效。