Skip to content

Latest commit

 

History

History
128 lines (93 loc) · 7.58 KB

README_CN.md

File metadata and controls

128 lines (93 loc) · 7.58 KB

Gogradle - 完善的Go语言构建工具

Build Status Build Status Coverage Status Java 8+ Apache License 2

1

2017-06-23 Gogradle荣获Gradle 2017年度插件奖, 请参阅在Gradle Summit 2017上的演讲.

2017-12-17 现在Gogradle可以在不做任何额外设置的情况下构建Github's top 1000中的817个!

2017-03-20 现在Gogradle已经能够生成HTML格式的测试/覆盖率报告了!

Gogradle是什么?

Gogradle是一个为Go语言提供现代构建支持的Gradle插件。Gogradle深受glide启发(这里需要向它致以崇高的敬意),可以简单地理解为glide+make

为什么使用Gogradle?

  • make的学习曲线陡峭,许多人(比如我)并不擅长;Gradle使用语法接近Java的DSL来完成构建工作,更加容易使用
  • Makefile和Shell跨平台能力差,尤其对Windows用户不友好,而受益于Gradle和JVM,Gogradle提供了无与伦比的跨平台支持,并且有成熟的Java生态系统支持
  • Gradle生态系统拥有很多成熟的插件,你也可以方便的实现自己的插件,以复用构建的相关代码
  • Gogradle支持项目级的GOPATH,你可以自己决定使用全局GOPATH还是项目级别的GOPATH
  • Gogradle支持多Go版本共存和切换
  • 社区的各种依赖管理工具众多,且互不兼容
    • Gogradle提供了导入命令,从而使你能够方便地从其他工具迁移到Gogradle
    • Gogradle兼容glide/glock/godep/gom/gopm/govendor/gvt/gbvendor/trash/gpm工具。在查找一个依赖包的传递性依赖时,它能够自动识别工具的锁定文件
  • Gogradle会长期维护

Gogradle实现了glide的绝大部分功能,并添加了一些额外的功能特性:

  • 测试和覆盖率报告生成
  • Go的多版本管理
  • IDE支持
  • 使用动态语言特性完成仓库的声明和替换——即镜像仓库

如果你曾被上述问题之一困扰,又或者你曾是Java开发者、熟悉Gradle,那么Gogradle是你不二的选择!

Gogradle的目标不是取代其他的工具,而是为开发者提供一个额外的选项。

Gogradle不是一个玩具,它的代码中有52%是测试。此外,我们还使用Github's top 1000 Go repositories 进行真实环境下的测试。

功能特性

  • JDK 8+外无需预先安装任何东西(包括Go本身),若使用JetBrains系IDE可无需安装JDK
  • 支持Go 1.5+且允许多版本共存
  • 完美支持几乎所有平台(只要能够运行Java,本项目的所有测试在OS X 10.11/Ubuntu 12.04/Windows 7上通过)
  • 项目级的依赖隔离,无需设置GOPATH
  • 完善的包管理
    • 无需手工安装依赖包,只需指定版本
    • 安装两种版本控制工具:Git/Mercurial
    • 支持传递性依赖
    • 支持自定义传递性依赖策略
    • 自动解决冲突
    • 支持依赖锁定
    • 支持glide/glock/godep/gom/gopm/govendor/gvt/gbvendor/trash/gpm等外部依赖的读取和导入(基于这份报告
    • 支持submodule
    • 支持语义化版本
    • 支持依赖的扁平化 (受glide启发)
    • 支持本地包重命名
    • 支持私有仓库
    • 支持仓库url替换
    • 构建、测试依赖分别管理
    • 支持依赖树可视化
    • 依赖一个特定包的某个子包
  • 支持构建、测试、单个/通配符测试、交叉编译
  • 现代的、生产级别的自动化构建支持,添加自定义任务极其简单
  • 原生的Gradle语法
  • 额外为中国大陆开发者提供的特性,你懂的
  • Shadowsocks支持
  • IDE支持
  • 测试和覆盖率报告生成
  • 增量构建

Gogradle如何工作

Gogradle基于vendor机制,你通过在build.gradle中使用Gradle的DSL来声明依赖和构建逻辑。 Gogradle会按照声明进行依赖包和传递性依赖包的解析,并解决冲突,然后安装到vendor目录中,最后执行构建。在这个过程中,依赖会被扁平化以避免可能出现的问题。稍后,你可以将解析后的依赖锁定,以实现可复现的构建。vendor目录是否提交到代码仓库中由你自己决定。

Gogradle支持项目级的GOPATH。在构建一个项目时,你可将其clone到任何地方。如果你的项目不在GOPATH下的相应位置,Gogradle会在项目目录下创建一个符号链接,然后在构建中使用这个符号链接作为GOPATH——在很多场景下,这是很有用的。

猛戳这里查看Gogradle的示例。

目录

截图

测试报告截图

1 1 1 1

覆盖率报告截图

1 1

获取帮助

有任何问题,可以加入QQ群Gogradle交流群:

1

向Gogradle贡献提出建议或贡献代码

若觉得不错,请Star。

有问题和需求请直接提issue

欲和我一起改进Gogradle,请提交PR

如何改进

我们推荐在IntelliJ IDEA中开发Gogradle,你可以运行./gradlew idea然后在IDEA中打开生成的.ipr文件。

请通过./gradlew check确保所有检查通过。