gogradle

Gogradle的任务

在Gradle的构建模型中,一个独立执行的任务单元称为Task。Gogradle预定义了以下任务:

1

下面将对这些任务进行介绍。在开始前,我们假定你的项目的包路径是github.com/my/project,你的系统环境是Windows x64。

goClean

清除项目中的临时文件,即.gogradle目录。

goPrepare

进行一些准备工作,例如build.gradle中配置的合法性校验、指定Go语言版本的下载与安装。

showGopathGoroot

依赖goPrepare任务。因为Gogradle支持项目级的GOPATH和多Go版本的共存,此任务用于显示当前构建使用的GOPATHGOROOT

goInit

依赖goPrepare任务。执行从其他包管理工具的迁移工作。当前支持的包管理工具有:glide/glock/godep/gom/gopm/govendor/gvt/gbvendor/trash/gpm

resolveBuildDependencies/resolveTestDependencies

依赖goPrepare任务,分别解析buildtest的依赖,生成依赖树。在这个过程中会解决相关依赖之间的冲突。

installDependencies

内部任务,请勿使用。此任务检查resolveBuildDependencies/resolveTestDependencies任务是否存在,并将相应的依赖扁平化后安装到vendor中。其中build依赖的优先级高于test依赖。

goDependencies

依赖resolveBuildDependencies/resolveTestDependencies任务,显示当前项目的依赖树。这对于包冲突的解决非常有用。

goVendor

依赖resolveBuildDependencies/resolveTestDependencies/installDependencies任务。将解析后的build依赖和test依赖合并后安装到vendor目录。详见依赖安装到vendor目录

goLock

依赖goVendor任务,生成依赖锁定文件。详见依赖锁定

goBuild

依赖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下生成三个文件:

如果你的main包并不在项目的根目录下,或者你希望添加一些自定义的命令行参数,你需要进行如下配置:

goBuild {
    go 'build -o ./gogradle/output --my-own-cmd-arguments github.com/my/package/my/subpackage'
}

注意,go后面的引号是必须的。

goTest

依赖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任务尚不支持自定义配置。

gofmt

依赖goPrepare任务。运行gofmt,默认情况下,它会使用-w修改项目中的文件。若不希望如此,或者想添加其他的参数,使用:

gofmt {
    gofmt "-r '(a) -> a' -l *.go"
}

goVet

依赖goVendor任务。运行go vet。默认情况下,若go vet返回值非零,该任务会失败。由于go vet可能不准确,可以使用以下配置忽略错误:

goVet {
    continueOnFailure = true
}

goCover

依赖test任务,生成测试报告,默认位于 <project root>/.gogradle/reports/coverage

goCheck

通常该任务被CI系统调用,用于执行代码检查,例如覆盖率、代码风格等。默认依赖goTest任务、goVet任务和gofmt任务。

自定义任务

Gogradle支持自定义的go任务。详见自定义任务

欲了解更多有关任务的信息,请参考官方文档

Gogradle 0.11.0之前的任务名冲突

在Gogradle 0.11.0之前,你可以通过-Dgogradle.alias=true将默认的任务名build/test重命名为goBuild/goTest。从0.11.0开始,这个参数不再有效。