Gradle

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。Gradle 构建脚本使用的是 Groovy 或 Kotlin 的特定领域语言来编写的，而不是传统的XML。

当前官方支持的语言为Java、Groovy、Scala、C++、Swift、JavaScript等以及Spring框架。

使用 Gradle 的優勢 
 自動處理套件相依關係 - 取自 Maven Repos 的概念
 自動處理佈署問題 - 取自 Ant 的概念
 條件判斷寫法直覺 - 使用 Groovy 語言

過去 Java 開發者常用 Maven 和 Ant 等工具進行封裝佈署的自動化，或是兩者兼用，不過這兩個套件彼此有優缺點，如果頻繁改變相依套件版本，使用 Ant 相當麻煩，如果瑣碎工作很多，Maven 功能不足，而且兩者都使用 XML 描述，相當不利於設計 if、switch 等判斷式，即使寫了可讀性也不佳，而 Gradle 改良了過去 Maven、Ant 帶給開發者的問題，至今也成為 Android Studio 內建的封裝佈署工具。

概念

插件 
由于Gradle 的核心功能为真实世界提供了很少的自动化，其他实用性功能都是由插件提供，所以往往在使用了Gradle时候，往往都会使用插件以完整自动化操作。在特定的上下文语境下，Gradle 插件提供给用户对应合适的默认事项以及标准（惯例）。 换言之，插件是对真实环境和上下文的一个补充和扩展。

使用插件分两步：解析插件、应用插件。Gradle插件常见的两种关键词apply和plugins ，前者仅仅是应用插件，后者是既分析又应用插件。

依赖约束 
依赖约束（Dependency constraint），用于帮助模块去获取一个可用的依赖。依赖约束，可以缩小模块的可支持版本的范围。而且这也能适用于传递依赖（transitive dependencies）。 示例如下：dependencies {
    implementation 'org.apache.httpcomponents:httpclient'
    constraints {
        implementation('org.apache.httpcomponents:httpclient:4.5.3') {
            because '之前的版本有bug，会影响到应用'
        }
        implementation('commons-codec:commons-codec:1.11') {
            because ' 从httpclient获取的 1.9 版本有bug，会影响到应用'
        }
    }
}

插件

Java

Java Plugin 
Java插件为项目提供了Java编译、测试以及其他一系列功能。同时Java插件是其他JVM语言插件的基础。官方文档不建议使用者再直接使用Java插件，而应该使用基于Java插件的衍生插件，如：java-library和application。 在java插件中，compile 关键词（编译时依赖）已经废弃，取而代之是 implementation 关键词 ，而在java-library中可使用api和implementation关键词表示依赖。

Java Application插件 
Application插件，用于创建可执行的 JVM 应用。

Java Library插件 
Java依赖包插件用于提供Java依赖包的专门知识。 java-library插件增加了API的概念。implementation 和api关键词区别在于：api所依赖的依赖包，会作为该项目的API被暴露于调用者；implementation 所依赖的依赖包，不会作为该项目的API而暴露于调用者，调用者如果需要使用该依赖包需要另外声明。

Java Platform插件 
Java平台插件为Java生态系统提供平台的功能。平台可用于各种目的，如：

 各个子项目使用同一个版本号和描述，进行发布。
 为使用者提供一个推荐的版本的依赖包组合。
 在不同的子项目中，共享依赖版本。

Ant迁移示例 
Gradle与Ant有很紧密集成，甚至在构建时可以把Ant构建脚本直接导入。下面的例子展示了一个简单的Ant target被引入为一个Gradle task。                                  

build.xml
<project>
  <target name="ant.target">
    <echo message="Running ant.target!"/>
  </target>
</project>

build.gradle
ant.importBuild 'build.xml'

运行 gradle ant.target 将显示如下结果

> gradle ant.target
:ant.target
[ant:echo] Running ant.target!

BUILD SUCCESSFUL

参考文献

参见 
 Apache Ant
 Apache Maven
 
 SCons

自动化构建
編譯工具
Java开发工具
跨平台軟體
使用Apache许可证的软件
2007年软件