本页使用了标题或全文手工转换

Gradle

维基百科,自由的百科全书
跳到导航 跳到搜索
Gradle
Gradle logo small.png
原作者 Hans Dockter
開發者 Gradle developers
穩定版本
6.3[1]
(2020年3月24日,​2個月前​(2020-03-24
源代码库 編輯維基數據鏈接
编程语言 JavaGroovy
操作系统 跨平台
类型 自动化构建工具
许可协议 Apache许可证 2.0
网站 http://www.gradle.org/

Gradle是一个基于Apache AntApache Maven概念的项目自动化建构工具。Gradle 构建脚本使用的是 GroovyKotlin特定领域语言来编写的[2],而不是传统的XML[3]

当前官方支持的语言为JavaGroovyScalaC++SwiftJavaScript等语言以及Spring框架[4]

使用 Gradle 的優勢[编辑]

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

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

概念[编辑]

插件[编辑]

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

使用插件分两步:解析插件、应用插件。[8]Gradle插件常见的两种关键词applyplugins ,前者仅仅是应用插件,后者是既分析又应用插件。[9]

依赖约束[编辑]

依赖约束(Dependency constraint),用于帮助模块去获取一个可用的依赖。依赖约束,可以缩小模块的可支持版本的范围。而且这也能适用于传递依赖(transitive dependencies)。[10] 示例如下:

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。[11] 在java插件中,compile 关键词(编译时依赖)已经废弃,取而代之是 implementation 关键词[12] ,而在java-library中可使用apiimplementation关键词表示依赖。[13]

Java Application插件[编辑]

Application插件,用于创建可执行的 JVM 应用。[14]

Java Library插件[编辑]

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

Java Platform插件[编辑]

Java平台插件为Java生态系统提供平台的功能。平台可用于各种目的,如:[15]

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

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

参考文献[编辑]

  1. ^ http://www.gradle.org/docs/current/release-notes
  2. ^ Gradle User Manual. docs.gradle.org. [2020-02-21]. 
  3. ^ 存档副本. [2013-07-03]. (原始内容存档于2013-04-15). 
  4. ^ Building Java Applications. guides.gradle.org. [2020-02-21]. 
  5. ^ Using Gradle Plugins. docs.gradle.org. [2020-02-21]. 
  6. ^ Gradle 插件 - Gradle 用户指南官方文档中文版 - UDN开源文档. doc.yonyoucloud.com. [2020-02-21]. 
  7. ^ Designing Gradle plugins. guides.gradle.org. [2020-02-21]. 
  8. ^ Using Gradle Plugins. docs.gradle.org. [2020-02-23]. 
  9. ^ Using Gradle Plugins. docs.gradle.org. [2020-02-23]. 
  10. ^ Dependency Management Terminology. docs.gradle.org. [2020-02-24]. 
  11. ^ The Java Plugin. docs.gradle.org. [2020-02-21]. 
  12. ^ The Java Plugin. docs.gradle.org. [2020-02-21]. 
  13. ^ 13.0 13.1 The Java Library Plugin. docs.gradle.org. [2020-02-21]. 
  14. ^ The Java Plugin. docs.gradle.org. [2020-02-21]. 
  15. ^ The Java Platform Plugin. docs.gradle.org. [2020-02-23]. 

参见[编辑]