java - tutorial - gradle教學




何時使用gradle.properties與settings.gradle? (2)

gradle構建有三個文件

  • build.gradle ,用於定義構建配置腳本
  • gradle.properties
  • settings.gradle

問題

  • settings.gradlegradle.properties 之間有什麼區別?
  • 應該何時將設置放入 settings.gradlegradle.properties

settings.gradle

settings.gradle 文件是一個Groovy腳本,就像 build.gradle 文件一樣。 每個構建中只會執行一個 settings.gradle 腳本(與多項目構建中的多個 build.gradle 腳本相比)。 settings.gradle 腳本將在任何 build.gradle 腳本之前執行,甚至在創建 Project 實例之前執行。 因此,它將根據 Settings 對象進行評估。 使用此 Settings 對象,您可以將子項目添加到構建中,從命令行( StartParameter )修改參數,並訪問 Gradle 像以註冊生命週期處理程序。 因此,如果您的設置與構建相關且不一定與項目相關或 包含可能的子項目 之前 需要邏輯,請使用 settings.gradle

gradle.properties

gradle.properties 文件是一個簡單的Java Properties 文件,它只通過自動包含在 Project 對象的範圍內(即所謂的“項目屬性”)獲得特殊角色。 它是一個簡單的鍵值存儲,只允許字符串值(因此您需要自己拆分列表或數組)。 您可以將 gradle.properties 文件放到這些位置:

  • 直接在項目目錄中(與項目相關的值)
  • 在用戶主目錄 .gradle 目錄中(對於用戶或環境相關的值)

多模塊項目有 一個主模塊 和許多子模塊。 它有這樣的佈局:

(root)
  +- settings.gradle       
  +- build.gradle
  +- gradle.properties     # optional
  +-- buildSrc/            # optional
  |     +- build.gradle    # optional
  |     +-- src/           # optional
  |     +-- test/          # optional
  +-- gradle/              # optional
  |     +- utils.gradle    # optional
  +-- sub-a/
  |     +- build.gradle
  |     +- src/
  +-- sub-b/
        +- build.gradle
        +- src/

子模塊也可以位於子文件夾的更深處,但是如果不修改settings.gradle中的代碼,它們的名稱將包含此類文件夾的名稱。

settings.gradle

settings.gradle的主要作用是定義所有包含的子模塊並標記模塊樹的目錄根,因此在多模塊項目中只能有一個 settings.gradle 文件。

rootProject.name = 'project-x'

include 'sub-a', 'sub-b'

設置文件也是用groovy編寫的,子模塊查找可以自定義。

的build.gradle

每個模塊有一個這樣的文件,它包含該模塊的構建邏輯。

主模塊 build.gradle 文件中,您可以使用 allprojects {}subprojects {} 來定義所有其他模塊的設置。

在子模塊的 build.gradle 文件中,您可以使用 compile project(':sub-a') 使一個子模塊依賴於另一個子模塊。

gradle.properties

這是可選的,其主要目的是提供用於運行gradle本身的啟動選項,例如

org.gradle.jvmargs=-Xmx=... -Dfile.encoding=UTF-8 ...
org.gradle.configureondemand=true

這些值可以由文件 USER_HOME/.gradle/gradle.properties 覆蓋,並由gradle命令行參數覆蓋。 此外,可以使用 systemProp. 為此文件中的構建設置環境變量 systemProp. 作為前綴。

此文件中的任何屬性都可以在任何build.gradle中使用,因此一些項目還將依賴版本或發布信息放在 gradle.properties ,但這可能是濫用此文件。

gradle產出/ utils.gradle

(可以使用文件夾或文件的任何名稱。)您可以定義其他自定義gradle文件以重用定義,並將它們包含在其他gradle文件中

apply from: "$rootDir/gradle/utils.gradle"

buildSrc / ...

這個文件夾很特別,就像一個單獨的gradle項目本身。 它是在做任何其他事情之前構建的,並且可以提供在任何其他gradle文件中使用的函數。 由於技術原因,IDE對此文件夾的引用支持比從多個 build.gradle 文件 build.gradle 公共代碼提取到單獨位置的任何其他方式更好。 您可以在java,groovy或kotlin中定義復雜的自定義構建邏輯,而不是編寫和部署插件。 這對於自定義構建代碼的單元測試也很有用,因為您可以進行單元測試。







build-system