您應該了解一些基本概念,這將幫助您編寫 Gradle 腳本。
首先,Gradle 腳本是組態腳本。當腳本執行時,它會組態特定類型的物件。例如,當建置腳本執行時,它會組態類型為 Project
的物件。此物件稱為腳本的委派物件。下表顯示了每種 Gradle 腳本的委派。
腳本類型 | 委派給以下實例 |
建置腳本 |
專案 (Project)
|
初始化腳本 |
Gradle
|
設定腳本 |
設定 (Settings)
|
委派物件的屬性和方法可供您在腳本中使用。
其次,每個 Gradle 腳本都實作了 Script
介面。此介面定義了許多您可以在腳本中使用的屬性和方法。
建置腳本由零個或多個語句和腳本區塊組成。語句可以包括方法呼叫、屬性賦值和本機變數定義。腳本區塊是將閉包作為參數的方法呼叫。閉包被視為組態閉包,它在執行時組態某些委派物件。頂層腳本區塊如下所示。
區塊 | 描述 |
allprojects { } | 組態此專案及其每個子專案。 |
artifacts { } | 組態此專案的發布 Artifact。 |
buildscript { } | 組態此專案的建置腳本類別路徑。 |
configurations { } | 組態此專案的依賴組態。 |
dependencies { } | 組態此專案的依賴。 |
repositories { } | 組態此專案的儲存庫。 |
sourceSets { } | 組態此專案的原始碼集。 |
subprojects { } | 組態此專案的子專案。 |
publishing { } | 組態由發布外掛程式新增的 |
建置腳本也是 Groovy 腳本,因此可以包含 Groovy 腳本中允許的那些元素,例如方法定義和類別定義。
下面列出了一些在 Gradle 腳本中使用的核心類型
類型 | 描述 |
專案 (Project) | 此介面是您用來從建置檔案與 Gradle 互動的主要 API。從 |
任務 (Task) |
|
Gradle | 代表 Gradle 的調用。 |
設定 (Settings) | 宣告實例化和組態要參與建置的 |
IncludedBuild | 包含在複合建置中的建置。 |
ProjectLayout | 提供對專案幾個重要位置的存取。 |
BuildLayout | 提供對 Gradle 建置重要位置的存取。 |
腳本 (Script) | 所有 Gradle Groovy DSL 腳本都實作了此介面,以新增一些 Gradle 特定的方法。由於您編譯的腳本類別將實作此介面,因此您可以直接在腳本中使用此介面宣告的方法和屬性。 |
SourceSet |
|
SourceSetOutput | 所有輸出目錄(已編譯的類別、已處理的資源等)的集合 - 請注意 |
SourceDirectorySet |
|
Configuration |
|
ConsumableConfiguration |
|
ResolvableConfiguration |
|
DependencyScopeConfiguration |
|
ResolutionStrategy | 定義圍繞依賴解析的策略。例如,強制某些依賴版本、替換、衝突解析或快照逾時。 |
ArtifactResolutionQuery | 用於建構查詢的建構器,該查詢可以解析指定組件的選定軟體 Artifact。 |
ComponentSelection | 代表模組的組件選擇器和要在組件選擇規則中評估的候選版本的元組。 |
ComponentSelectionRules | 代表組件選擇規則的容器。規則可以作為組態的 resolutionStrategy 的一部分應用,並且可以透過規則顯式接受或拒絕單個組件。既未接受也未拒絕的組件將受預設版本匹配策略的約束。 |
DependencyCollector |
|
ExtensionAware | 可以在運行時使用其他物件擴展的物件。 |
ExtraPropertiesExtension | Gradle 網域物件的額外、特設屬性。 |
PluginDependenciesSpec | 用於宣告要在腳本中使用的外掛程式的 DSL。 |
PluginDependencySpec | 外掛程式依賴的可變規範。 |
PluginManagementSpec | 組態如何解析外掛程式。 |
ProviderFactory | 用於建立 |
ResourceHandler | 提供對資源特定公用程式方法的存取,例如建立各種資源的工廠方法。 |
TextResourceFactory | 建立由來源(例如字串、檔案和歸檔項目)支援的 |
InputChanges | 提供對增量工作動作需要處理的任何輸入檔案的存取。 |
Distribution | 發行版允許捆綁應用程式或程式庫,包括依賴、原始碼... |
下面列出了用於組態發布的類型
類型 | 描述 |
PublishingExtension | 如何「發布」專案的不同組件的組態。 |
IvyPublication |
|
IvyArtifact | 作為 |
IvyArtifactSet |
|
IvyModuleDescriptorSpec | 任何 Ivy 發布的描述符。 |
IvyModuleDescriptorAuthor | Ivy 發布的作者。 |
IvyModuleDescriptorLicense | Ivy 發布的許可證。 |
IvyModuleDescriptorDescription | Ivy 發布的描述。 |
MavenPublication |
|
MavenArtifact | 作為 |
MavenArtifactSet |
|
MavenPom | Maven 發布的 POM。 |
MavenPomCiManagement | Maven 發布的 CI 管理系統。 |
MavenPomContributor | Maven 發布的貢獻者。 |
MavenPomContributorSpec | 允許新增 Maven 發布的貢獻者。 |
MavenPomDeveloper | Maven 發布的開發人員。 |
MavenPomDeveloperSpec | 允許將開發人員新增到 Maven 發布。 |
MavenPomDistributionManagement | Maven 發布的發行管理組態。 |
MavenPomIssueManagement | Maven 發布的問題管理系統。 |
MavenPomLicense | Maven 發布的許可證。 |
MavenPomLicenseSpec | 允許將許可證新增到 Maven 發布。 |
MavenPomMailingList | Maven 發布的郵件列表。 |
MavenPomMailingListSpec | 允許將郵件列表新增到 Maven 發布。 |
MavenPomOrganization | Maven 發布的組織。 |
MavenPomRelocation | 已移動到新群組和/或 Artifact ID 的 Maven 發布的重新定位資訊。 |
MavenPomScm | Maven 發布的 SCM(原始碼控制管理)。 |
處理各種宣告式元素(例如,依賴、組態、Artifact、任務等)的容器類型
類型 | 描述 |
TaskContainer |
|
ConfigurationContainer |
|
RepositoryHandler |
|
DependencyHandler |
|
ComponentMetadataHandler | 允許建置提供修改依賴軟體組件元資料的規則。組件元資料規則應用於建置腳本的依賴區塊 |
ArtifactHandler | 此類別用於定義要發布的 Artifact 並將其新增到組態。建立發布 Artifact 並不意味著建立歸檔。建立的是網域物件,它代表要發布的檔案以及有關應如何發布的資訊(例如,名稱)。 |
用於連線到儲存庫的憑證和驗證類型
類型 | 描述 |
AuthenticationSupported | 支援使用者名稱/密碼驗證的 Artifact 儲存庫。 |
Credentials | 用於不同驗證目的憑證的基本介面。(例如,驗證的 |
PasswordCredentials | 可用於登入受密碼保護的遠端儲存庫的使用者名稱/密碼憑證。 |
AwsCredentials | 代表用於透過 Amazon Web Services 驗證的憑證。 |
HttpHeaderCredentials | 可用於使用 HTTP 標頭登入受保護伺服器(例如,遠端儲存庫)的憑證。用於從屬性建立憑證的屬性是 |
AuthenticationContainer | 用於組態 |
Authentication | 傳輸驗證方案的基本介面。 |
BasicAuthentication | 透過 HTTP 進行基本存取驗證的驗證方案。使用此方案時,憑證會被搶先傳送。 |
HttpHeaderAuthentication | 透過 HTTP 進行 HTTP 標頭驗證的驗證方案。 |
DigestAuthentication | 透過 HTTP 進行摘要存取驗證的驗證方案。 |
用於連線和組態建置快取的類型
類型 | 描述 |
BuildCacheConfiguration | 整個 Gradle 建置的 建置快取 的組態。 |
DirectoryBuildCache | 本機目錄建置快取的組態物件。 |
HttpBuildCache | HTTP 建置快取的組態物件。快取項目透過 GET 載入,並透過 PUT 請求儲存。 |
用於組態輸入正規化的類型
類型 | 描述 |
InputNormalizationHandler | 用於組態輸入正規化。目前,只能組態運行時類別路徑正規化。 |
InputNormalization | 輸入正規化組態。當 Gradle 嘗試確定兩個任務輸入是否不同時,會使用輸入正規化。Gradle 正規化兩個輸入,並且僅當正規化不同時,輸入才被認為是不同的。 |
RuntimeClasspathNormalization | 運行時類別路徑正規化的組態。 |
以下是每個 Gradle 專案可用的任務類型。這些任務類型也可以直接在建置腳本中宣告和組態。
類型 | 描述 |
TaskReportTask | 顯示專案中的任務列表。當您從命令列執行 |
ProjectReportTask | 顯示建置中的專案列表。當您從命令列執行 |
DependencyReportTask | 顯示專案的依賴樹。當您從命令列執行 |
DependencyInsightReportTask | 產生一個報告,試圖回答諸如以下問題 |
PropertyReportTask | 顯示專案的屬性。當您從命令列執行 |
ComponentReport | 顯示有關專案產生的軟體組件的一些詳細資訊。 |
DependentComponentsReport | 顯示依賴組件。 |
ModelReport | 顯示有關專案組態模型的一些詳細資訊。當您從命令列執行 |
OutgoingVariantsReportTask | 一個任務,用於在命令列上報告專案的傳出變體。這對於列出專案在變體方面產生什麼以及每個變體附加了哪些 Artifact 非常有用。在此上下文中,變體必須理解為「專案產生的可以安全地被另一個專案使用的東西」。 |
ResolvableConfigurationsReportTask | 一個任務,用於報告專案的可解析組態,這些組態可以在命令列上解析。這對於確定哪些屬性與用於解析專案依賴關係的可解析組態相關聯非常有用。輸出可以幫助預測將解析每個依賴的哪個變體。 |
ArtifactTransformsReportTask | 一個任務,用於報告有關專案使用的 Artifact 轉換(由 |
下面列出了可在您的建置腳本中使用的各種任務類型
類型 | 描述 |
AntlrTask | 從 Antlr 文法產生剖析器。 |
BuildEnvironmentReportTask | 提供有關與任務關聯的專案的建置環境的資訊。 |
Checkstyle | 針對某些原始碼檔案執行 Checkstyle。 |
CodeNarc | 針對某些原始碼檔案執行 CodeNarc。 |
Copy | 將檔案複製到目標目錄中。此任務還可以在複製時重新命名和篩選檔案。該任務實作了 |
CreateStartScripts | 建立用於啟動 JVM 應用程式的啟動腳本。 |
Delete | 刪除檔案或目錄。範例 |
Ear | 組裝 EAR 歸檔。 |
Exec | 執行命令列程序。範例 |
GenerateIvyDescriptor | 產生 Ivy XML 模組描述符檔案。 |
GenerateMavenPom | 產生 Maven 模組描述符 (POM) 檔案。 |
GenerateBuildDashboard | 產生建置儀表板報告。 |
GradleBuild | 執行 Gradle 建置。 |
GroovyCompile | 編譯 Groovy 原始碼檔案,以及可選的 Java 原始碼檔案。 |
Groovydoc | 為 Groovy 原始碼以及可選的 Java 原始碼產生 HTML API 文件。 |
HtmlDependencyReportTask | 產生 HTML 依賴報告。此報告結合了 ASCII 依賴報告和 ASCII 依賴深入分析報告的功能。對於給定的專案,它產生每個組態的依賴樹,並且可以點擊每個依賴以顯示此依賴的深入分析。 |
JacocoReport | 產生 Jacoco 覆蓋率資料的 HTML、Xml 和 CSV 報告的任務。 |
JacocoCoverageVerification | 用於驗證程式碼覆蓋率指標的任務。如果根據指定的規則檢測到違規,則任務失敗。 |
Jar | 組裝 JAR 歸檔。 |
JavaCompile | 編譯 Java 原始碼檔案。 |
Javadoc | 產生 Java 類別的 HTML API 文件。 |
JavaExec | 在子程序中執行 Java 應用程式。 |
Pmd | 對 Java 原始碼檔案執行一組靜態程式碼分析規則,並產生找到的問題的報告。 |
ProcessResources | 將資源從其來源複製到其目標目錄,可能會處理它們。確保目標目錄中沒有剩餘的過時資源。 |
PublishToIvyRepository | 將 IvyPublication 發布到 IvyArtifactRepository。 |
PublishToMavenRepository | |
ScalaCompile | 編譯 Scala 原始碼檔案,以及可選的 Java 原始碼檔案。 |
ScalaDoc | 產生 Scala 原始碼檔案的 HTML API 文件。 |
UpdateDaemonJvm | 產生或更新 Gradle Daemon JVM 標準。這控制執行 Gradle Daemon 所需的 JVM 版本。 |
InitBuild | 產生 Gradle 專案結構。 |
Sign | 用於為一個或多個任務、檔案、可發布 Artifact 或組態建立數位簽名檔案的任務。 |
Sync | 將目標目錄的內容與某些原始碼目錄和檔案同步。 |
Tar | 組裝 TAR 歸檔。 |
AbstractTestTask | 所有測試任務的抽象類別。 |
Test | 執行 JUnit (3.8.x、4.x 或 5.x) 或 TestNG 測試。測試始終在(一個或多個)單獨的 JVM 中運行。 |
TestReport | 從一個或多個 |
War | 組裝 WAR 歸檔。 |
Wrapper | 產生腳本(適用於 *nix 和 windows),讓您可以使用 Gradle 建置專案,而無需安裝 Gradle。 |
WriteProperties | 以預期結果可重現的方式寫入 |
Zip | 組裝 ZIP 歸檔。預設設定是壓縮 zip 的內容。 |
下面列出了與建模測試套件相關的任務和可組態物件
類型 | 描述 |
TestingExtension | 此 DSL 元素存在以包含 |
TestSuite | 基本測試套件組件。測試套件是測試的集合。 |
JvmTestSuite | 測試套件是基於 JVM 的測試的集合。 |
TestSuiteTarget | 基本測試套件目標。測試套件目標是在特定環境(作業系統、Java 運行時等)中運行的測試集合。 |
JvmTestSuiteTarget | 定義 |
Test | 執行 JUnit (3.8.x、4.x 或 5.x) 或 TestNG 測試。測試始終在(一個或多個)單獨的 JVM 中運行。 |
Dependencies | 適用於所有 |
GradleDependencies | 適用於 |
TestFixturesDependencyModifiers | 可以在其他模組中為 |
PlatformDependencyModifiers | 可以在其他模組中為 |
JvmComponentDependencies | 此 DSL 元素用於將依賴新增到組件,例如 |
下面列出了一些在產生報告時使用的類型
類型 | 描述 |
CustomizableHtmlReport | 可以透過 XSLT 樣式表自訂其產生的 HTML 報告。 |
SingleFileReport | 作為單個檔案的報告。 |
DirectoryReport | 要建立的基於目錄的報告。 |
Report | 要建立的基於檔案的報告。 |
Reporting | 提供報告選項的物件。 |
ReportContainer | 代表潛在報告的 |
ReportingExtension | 名為「reporting」的專案擴展,提供基本報告設定和公用程式。 |
AggregateTestReport | 彙總測試報告輸入的容器。 |
JacocoCoverageReport | 彙總 JaCoCo 程式碼覆蓋率報告輸入的容器。 |
用於組態 Eclipse 或 IDEA 外掛程式
類型 | 描述 |
EclipseModel | Eclipse 專案資訊的 DSL 友善模型。自訂 Eclipse 專案產生的第一個入口點。 |
EclipseProject | 啟用微調 Eclipse 外掛程式的專案詳細資訊 (.project 檔案) |
EclipseClasspath | 產生的 Eclipse 專案的建置路徑設定。 |
EclipseJdt | 啟用微調 Eclipse 外掛程式的 jdt 詳細資訊 |
EclipseWtp | 啟用微調 Eclipse 外掛程式的 wtp/wst 詳細資訊 |
EclipseWtpComponent | 啟用微調 Eclipse 外掛程式的 wtp 組件詳細資訊 |
EclipseWtpFacet | 啟用微調 Eclipse 外掛程式的 wtp facet 詳細資訊 |
IdeaModel | IDEA 專案資訊的 DSL 友善模型。自訂 IDEA 產生時的第一個入口點。 |
IdeaProject | 啟用微調 IDEA 外掛程式的專案詳細資訊 (*.ipr 檔案)。 |
IdeaModule | 啟用微調 IDEA 外掛程式的模組詳細資訊 (*.iml 檔案)。 |
IdeaWorkspace | 啟用微調 IDEA 外掛程式的工作區詳細資訊 (*.iws 檔案)。 |
XmlFileContentMerger | 建模產生/剖析/合併功能。新增 XML 相關的掛鉤。 |
FileContentMerger | 建模產生/剖析/合併功能。 |
IDE 外掛程式貢獻的任務。若要組態 IDE 外掛程式,請使用 IDE 模型類型。
類型 | 描述 |
GenerateEclipseProject | 產生 Eclipse |
GenerateEclipseClasspath | 產生 Eclipse |
GenerateEclipseJdt | 產生 Eclipse JDT 組態檔案。如果您想微調 eclipse 組態 |
GenerateEclipseWtpComponent | 產生 Eclipse WTP 的 org.eclipse.wst.common.component 設定檔案。如果您想微調 eclipse 組態 |
GenerateEclipseWtpFacet | 產生 Eclipse WTP 的 org.eclipse.wst.common.project.facet.core 設定檔案。如果您想微調 eclipse 組態 |
GenerateIdeaModule | 產生 IDEA 模組檔案。如果您想微調 idea 組態 |
GenerateIdeaProject | 僅針對根專案產生 IDEA 專案檔案 *。如果您想微調 idea 組態 |
GenerateIdeaWorkspace | 僅針對根專案產生 IDEA 工作區檔案 *。目前,您幾乎無法組態工作區產生。 |
Xcode IDE 外掛程式貢獻的任務。若要組態 IDE 外掛程式,請使用 IDE 模型類型。
類型 | 描述 |
GenerateSchemeFileTask | 用於產生 Xcode scheme 檔案的任務 (例如 |
GenerateWorkspaceSettingsFileTask | 用於產生 Xcode 工作區設定檔案的任務 (例如 |
GenerateXcodeProjectFileTask | 用於產生 Xcode 專案檔案的任務 (例如 |
GenerateXcodeWorkspaceFileTask | 用於產生 Xcode 工作區檔案 (例如 |
由 Visual Studio IDE 外掛程式貢獻的任務。若要設定 IDE 外掛程式,請使用 IDE 模型類型。
類型 | 描述 |
GenerateSolutionFileTask | 用於產生 Visual Studio 方案檔案 (例如 |
GenerateProjectFileTask | 用於產生 Visual Studio 專案檔案 (例如 |
GenerateFiltersFileTask | 用於產生 Visual Studio 篩選器檔案 (例如 |
用於定義 Artifact 轉換。
類型 | 描述 |
TransformAction | Artifact 轉換動作的介面。 |
TransformOutputs | Artifact 轉換的輸出。 |
TransformSpec | Artifact 轉換註冊的基本設定。 |
用於設定建置 C++ 和 Swift 組件的工具鏈。
用於設定以原生程式碼開發的軟體組件。
類型 | 描述 |
PrebuiltLibrary | 一個非由 Gradle 建置的程式庫組件。 |
PrebuiltSharedLibraryBinary | 一個存在於檔案系統上已知位置的共享程式庫。 |
PrebuiltStaticLibraryBinary | 一個存在於檔案系統上已知位置的靜態程式庫。 |
NativeComponentSpec | 軟體組件的定義,該組件將由 Gradle 建置以在 JVM 平台上執行。 |
NativeExecutableSpec | 原生可執行組件的定義,該組件將由 Gradle 建置。 |
NativeLibrarySpec | 原生程式庫組件的定義,該組件將由 Gradle 建置。 |
NativeTestSuiteSpec | 代表將一起執行的測試套件的組件。 |
CUnitTestSuiteSpec | CUnit 測試的測試套件。 |
GoogleTestTestSuiteSpec | Google Test 測試的測試套件。 |
NativeBinarySpec | 代表作為建置原生組件結果的二進位 Artifact。 |
NativeExecutableBinarySpec | 由 Gradle 為原生應用程式建置的二進位檔。 |
NativeLibraryBinarySpec | 代表作為建置原生程式庫組件結果的二進位 Artifact。 |
SharedLibraryBinarySpec | 由 Gradle 為原生程式庫建置的共享程式庫二進位檔。 |
StaticLibraryBinarySpec | 由 Gradle 為原生程式庫建置的靜態程式庫二進位檔。 |
NativeTestSuiteBinarySpec | 一個執行測試套件的可執行檔。 |
CUnitTestSuiteBinarySpec | 一個執行 CUnit 測試套件的可執行檔。 |
GoogleTestTestSuiteBinarySpec | 一個執行 Google Test 測試套件的可執行檔。 |
NativePlatform | 用於建置原生二進位檔的目標平台。每個目標平台都有一個名稱,並且可以選擇性地給定特定的 |
BuildType | 指定原生二進位檔的建置類型。常見的建置類型為 'debug' 和 'release',但也可以定義其他類型。 |
Flavor | 定義一個自訂變體,用於區分 |
AssemblerSourceSet | 一組組合語言原始碼。 |
CSourceSet | 一組 C 原始碼檔案。 |
CppSourceSet | 一組 C++ 原始碼檔案。 |
ObjectiveCSourceSet | 一組 Objective-C 原始碼檔案。 |
ObjectiveCppSourceSet | 一組 Objective-C++ 原始碼檔案。 |
WindowsResourceSet | 一組 Windows 資源定義檔案。 |
VisualStudioProject | 一個 Visual Studio 專案,由一個或多個原生二進位檔建立。 |
VisualStudioSolution | 一個 Visual Studio 方案,代表建置中的一個或多個原生二進位檔。 |
NativeExecutable | 一個由 Gradle 建置的可執行原生組件。 |
NativeLibrary | 一個由 Gradle 專案建置的程式庫組件。 |
NativeBinary | 代表特定的二進位 Artifact。 |
NativeExecutableBinary |
|
SharedLibraryBinary | 已編譯並連結為共享程式庫的 |
StaticLibraryBinary | 已編譯並封存到靜態程式庫中的 |
用於設定 C++ 組件。
類型 | 描述 |
CppApplication | C++ 應用程式的設定,定義構成應用程式的原始碼檔案以及其他設定。 |
CppLibrary | C++ 程式庫的設定,定義構成程式庫的原始碼檔案和標頭目錄以及其他設定。 |
CppTestSuite | 一個 C++ 測試套件。 |
用於設定 Swift 組件。
類型 | 描述 |
SwiftApplication | Swift 應用程式的設定,定義構成應用程式的原始碼檔案以及其他設定。 |
SwiftLibrary | Swift 程式庫的設定,定義構成程式庫的原始碼檔案以及其他設定。 |
SwiftXCTestSuite | 一個以 Swift 實作的 XCTest 套件。 |
用於建置原生二進位檔的任務。
類型 | 描述 |
CppCompile | 將 C++ 原始碼檔案編譯成物件檔案。 |
SwiftCompile | 將 Swift 原始碼檔案編譯成物件檔案。 |
LinkExecutable | 從物件檔案和程式庫連結二進位可執行檔。 |
LinkSharedLibrary | 從物件檔案和匯入的程式庫連結二進位共享程式庫。 |
CreateStaticLibrary | 從物件檔案組裝靜態程式庫。 |
LinkMachOBundle | 從物件檔案和匯入的程式庫連結二進位套件 (bundle)。 |
InstallExecutable | 安裝可執行檔及其相依程式庫,以便輕鬆執行。 |
InstallXCTestBundle | 建立包含執行腳本的 XCTest 套件 (bundle),以便輕鬆執行。 |
RunTestExecutable | 執行已編譯和安裝的測試可執行檔。 |
XCTest | 執行 XCTest 測試。測試始終在單次執行中執行。 |
用於建置原生二進位檔的任務。
類型 | 描述 |
C 編譯 | 將 C 原始碼檔案編譯成物件檔案。 |
組裝 | 將組合語言原始碼檔案翻譯成物件檔案。 |
Objective-C 編譯 | 將 Objective-C 原始碼檔案編譯成物件檔案。 |
Objective-C++ 編譯 | 將 Objective-C++ 原始碼檔案編譯成物件檔案。 |
Windows 資源編譯 | 將 Windows 資源腳本編譯成 .res 檔案。 |