Gradle

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
Gradle
原作者Hans Dockter
開發者Gradle developers
目前版本
  • 8.7 (2024年3月22日;穩定版本)[1]
編輯維基數據連結
原始碼庫 編輯維基數據連結
程式語言JavaGroovyKotlin
作業系統跨平台
類型自動化構建工具
許可協定Apache許可證 2.0
網站http://www.gradle.org/

Gradle是一個基於Apache AntApache Maven概念的專案自動化建構工具。Gradle 構建指令碼使用的是 GroovyKotlin特定領域語言來編寫的[3],而不是傳統的XML[4]

當前官方支援的語言為JavaGroovyScalaC++SwiftJavaScript等以及Spring框架[5]

使用 Gradle 的優勢[編輯]

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

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

概念[編輯]

外掛程式[編輯]

由於Gradle 的核心功能為真實世界提供了很少的自動化,其他實用性功能都是由外掛程式提供[6][7],所以往往在使用了Gradle時候,往往都會使用外掛程式以完整自動化操作。在特定的上下文語境下,Gradle 外掛程式提供給用戶對應合適的預設事項以及標準(慣例)。[8] 換言之,外掛程式是對真實環境和上下文的一個補充和擴充。

使用外掛程式分兩步:解析外掛程式、應用外掛程式。[9]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 應用。[11]

Java Library外掛程式[編輯]

Java依賴包外掛程式用於提供Java依賴包的專門知識。 java-library外掛程式增加了API的概念。implementationapi關鍵詞區別在於:api所依賴的依賴包,會作為該專案的API被暴露於呼叫者;implementation 所依賴的依賴包,不會作為該專案的API而暴露於呼叫者,呼叫者如果需要使用該依賴包需要另外聲明。[13]

Java Platform外掛程式[編輯]

Java平台外掛程式為Java生態系統提供平台的功能。平台可用於各種目的,如:[14]

  • 各個子專案使用同一個版本號和描述,進行發佈。
  • 為用戶提供一個推薦的版本的依賴包組合。
  • 在不同的子專案中,共用依賴版本。

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. ^ Release 8.7. 
  2. ^ Gradle Distributions. Gradle Services. [2022-01-09]. (原始內容存檔於2021-02-03). 
  3. ^ Gradle User Manual. docs.gradle.org. [2020-02-21]. (原始內容存檔於2021-02-03). 
  4. ^ 存档副本. [2013-07-03]. (原始內容存檔於2013-04-15). 
  5. ^ Building Java Applications. guides.gradle.org. [2020-02-21]. (原始內容存檔於2020-10-26). 
  6. ^ Using Gradle Plugins. docs.gradle.org. [2020-02-21]. (原始內容存檔於2020-11-23). 
  7. ^ Gradle 插件 - Gradle 用户指南官方文档中文版 - UDN开源文档. doc.yonyoucloud.com. [2020-02-21]. (原始內容存檔於2020-02-21). 
  8. ^ Designing Gradle plugins. guides.gradle.org. [2020-02-21]. (原始內容存檔於2020-10-26). 
  9. ^ 9.0 9.1 Using Gradle Plugins. docs.gradle.org. [2020-02-23]. (原始內容存檔於2020-11-23). 
  10. ^ Dependency Management Terminology. docs.gradle.org. [2020-02-24]. (原始內容存檔於2020-02-21). 
  11. ^ 11.0 11.1 The Java Plugin. docs.gradle.org. [2020-02-21]. (原始內容存檔於2021-02-03). 
  12. ^ The Java Plugin. docs.gradle.org. [2020-02-21]. (原始內容存檔於2021-02-03). 
  13. ^ 13.0 13.1 The Java Library Plugin. docs.gradle.org. [2020-02-21]. (原始內容存檔於2020-12-23). 
  14. ^ The Java Platform Plugin. docs.gradle.org. [2020-02-23]. (原始內容存檔於2020-10-28). 

參見[編輯]