特点
这里简述下 Gradle 的特点.
1. 声明式构建和合约构建
Gradle 的核心是基于 Groovy 的 领域特定语言 (DSL), 具有十分优秀的扩展性. Gradle 通过提供可以随意集成的声明式语言元素将声明性构建推到了一个新的高度. 这些元素还提供了对 Java, Groovy, OSGi, 网络和Scala 等项目的支持. 而且, 基于这种声明式语言的可扩展性. 你可以添加自己的语言元素或加强现有的语言元素, 从而提供简洁, 易于维护和易于理解的构建.
2. 基于依赖的编程语言
声明式语言位于通用任务图 ( general purpose task graph ) 的顶端,它可以被充分利用在你的构建中. 它具有强大的灵活性, 可以满足使用者对 Gradle 的一些特别的需求.
3. 让构建结构化
Gradle 的易适应性和丰富性可让你在构建里直接套用通用的设计原则. 例如, 你可以非常容易容易的使用一些可重用的组件来构成你的构建. Inline stuff where unnecessary indirections would be inappropriate. 不要强行分离已经结合在一起的部分 (例如, 在你的项目层次结构中). 避免使构建难以维护. 总之, 你可以创建一个结构良好,易于维护, 易于理解的构建.
4. API深化
你会非常乐意在整个构建执行的生命周期中使用 Gradle, 因为Gradle 允许你管理和定制它的配置和执行行为.
5. Gradle scales
Gradle scales very well. 不管是简单的独立项目还是大型的多项目构建, 它都能显著的提高效率. 它不仅可以提供最先进的构建功能,还可以解决许多大公司碰到的构建 性能低下的问题.
6. 多项目构建
Gradle 对多项目的支持是非常出色的. 它允许你模拟在多项目构建中项目的关系,这正是你所要关注的地方. Gradle 遵从你的布局而是去违反它.
Gradle 提供了局部构建的功能. 如果你构建一个单独的子项目, Gradle 会构建这个子项目依赖的所有子项目. 你也可以选择依赖于另一个特别的子项目重新构建这些子项目. 这样在一些大型项目里就可以节省非常多的时间.
7. 多种方式来管理你的依赖
不同的团队有不同的管理外部依赖的方法. Gradle 对于任何管理策略都提供了合适的支持. 从远程 Maven 和 Ivy 库的依赖管理到本地文件系统的 jars 或者 dirs.
8. Gradle 是第一个构建整合工具
Ant 的 tasks是 Gradle 中很重要的部分, 更有趣是 Ant 的 projects 也是十分重要的部分. Gradle 可以直接引入Ant project, 并在运行时直接将 Ant targets 转换成 Gradle tasks. 你可以在从 Gradle 中依赖它们, 并增强它们的功能, 甚至在 build.xml 中声明 Gradle tasks 的依赖. 并且properties, paths 等也可以通过同样的方法集成进来.
Gradle 完全支持 Maven 或者 lvy 仓库来发布或者提取依赖. Gradle 也提供了一个转化器, 用来将 maven 的 pom.xml 转换成 Gradle 脚本. 运行时引入 Maven 项目也会在稍后推出.
9. 易于迁移
Gradle 可以兼容任何结构. 因此你总是可以直接在 production 构建的 branch 里直接开发构建, 这样 production branch 的构建和 develop branch 的构建就可以同时开发. 我们通常建议编写一些测试代码来确保它们的功能是相同的. 通过这种方式, 在迁移的时候就不会显得那么混乱和不可靠, 这是通过婴儿学步的方式来获得最佳的实践.
10. Groovy
Gradle 的构建脚本是通过 Groovy 编写而不是 XML. 但是并不像其他方式, 这并不是为了简单的展示用动态语言编写的原始脚本有多么强大. 不然的话, 只会导致一个非常难以维护的构建. Gradle 的整个设计是朝着一种语言的方向开发的, 并不是一种死板的框架. Groovy 就像胶水一样, 把你像实现的构想和抽象的 Gradle 粘在一起.
10. Gradle wrapper
Gradle Wrapper 允许你在没有安装 Gradle 的机器上运行 Gradle 构建. 在一些持续集成的服务器上, 这个功能将非常有用. 它同样也能降低使用一个开源项目的门槛, 也就是说构建它将会非常简单. Wrapper 对于公司来说也是非常有用的. 它并不需要为客户机提供相应的管理防范. 这种方式同样也能强制某一个版本 Gradle 的使用从而最小化某些支持问题.
11. 免费和开源
Gradle 是一个开源项目, 遵循 ASL 许可.