內容
跟隨本教程悼瓮,您將創(chuàng)建出一個簡單的Gradle項目验庙、調用一些基礎的Gradle命令随闽,并對Gradle如何進行項目管理有初步的了解垫卤。
準備工作
大約12分鐘的時間
控制臺或IDE應用程序
Java開發(fā)套件(JDK)威彰,如果要使用Gradle Groovy DSL需要1.7或更高版本,如果要使用Gradle Kotlin
DSL則需要1.8或更高版本(僅在運行Gradle時需要)Gradle的發(fā)行版穴肘,4.10-rc-2以上版本
shell命令行會以類Unix操作系統(tǒng)的樣子展示歇盼。每條命令在Windows下都有對應的等效命令。
初始化一個項目
首先评抚,我們?yōu)轫椖縿?chuàng)建一個目錄豹缀。
? mkdir basic-demo
? cd basic-demo
現在,我們可以使用Gradle的 init
命令簡單地創(chuàng)建一個項目慨代。我們會探尋所有生成出來的東西從而使您完全明白都發(fā)生了些什么耿眉。
? gradle init ①
Starting a Gradle Daemon (subsequent builds will be faster)
BUILD SUCCESSFUL in 3s
2 actionable tasks: 2 executed
① 如果您想使用Kotlin DSL,那么請使用
gradle init --dsl kotlin
鱼响。更多詳情參考文檔。
命令行會顯示“BUILD SUCCESSFUL”并生成下文所示的“空”項目组底。如果不是這樣丈积,那么請確認Gradle是不是
正確安裝了筐骇,以及 JAVA_HOME
環(huán)境變量是否正確地設置了。
Gradle為你生成了這些東西:
Groovy
├── build.gradle (1)
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar (2)
│ └── gradle-wrapper.properties (3)
├── gradlew (4)
├── gradlew.bat (5)
└── settings.gradle (6)
Kotlin
├── build.gradle.kts (1)
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar (2)
│ └── gradle-wrapper.properties (3)
├── gradlew (4)
├── gradlew.bat (5)
└── settings.gradle.kts (6)
- 配置了當前項目任務的項目配置腳本
- Gradle包裝器可執(zhí)行JAR包
- Gradle包裝器配置信息
- Gradle包裝器在類Unix操作系統(tǒng)下的腳本
- Gradle包裝器在Windows操作系統(tǒng)下的腳本
- 配置構建中參與項目的配置腳本
gradle init
可以生成多種不同類型的項目江滨,甚至知道如何將簡單的pom.xml
文件翻譯成Gradle支持的方式铛纬。
當當當當!我們的教程到這里就可以結束了唬滑。但你肯定要知道如何在項目中 使用 Gradle告唆,所以讓我們繼續(xù)吧。
創(chuàng)建一個任務
Gradle提供了通過基于Groovy或Kotlin的DSL創(chuàng)建和配置任務的API晶密。Project
包含了一系列Task
擒悬,每個任務都會執(zhí)行一些基礎操作。
Gradle附帶一個可以用來配置自有項目的任務庫稻艰。例如叫做 Copy
的一個核心種類懂牧,可以將文件從某個位置復制到另一處。Copy
任務是非常有用的(參考相關文檔獲取更多信息)尊勿,但是現在僧凤,再一次,讓我們保持簡單元扔。執(zhí)行如下步驟:
- 創(chuàng)建名為
src
的目錄躯保。 - 在
src
文件夾添加名為myfile.txt
的文件。其內容隨意(甚至可以為空)澎语,但現在為了方便途事,就添加一行Hello, World!
吧。 - 在構建文件中定義一個
Copy
類型的copy
任務(注意大小寫)咏连,用于將所有src
目錄下的文件復制到一個名為dest
的新文件夾里盯孙。(開發(fā)者無需自行創(chuàng)建dest
文件夾,任務會自動幫你創(chuàng)建祟滴。)
Groovy
task copy(type: Copy, group: "Custom", description: "Copies sources to the dest directory") {
from "src"
into "dest"
}
Kotlin
tasks.create<Copy>("copy") {
description = "Copies sources to the dest directory"
group = "Custom"
from("src")
into("dest")
}
在這里振惰,group
和 description
可以換成任何你需要的。甚至你也可以省略它們垄懂,但這樣做會導致它們在稍后我們將要使用的tasks
報告中被省略骑晶。
現在讓我們來執(zhí)行這個 copy
任務:
? ./gradlew copy
> Task :copy
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
檢查 dest
目錄下有沒有 myfile.txt
文件,并驗證內容是否一致草慧。
使用插件
Gradle包含一大堆插件桶蛔,而且還有很多很多插件在Gradle插件門戶提供。跟隨發(fā)行版提供的插件之一是base
插件漫谷。結合 Zip
核心類型仔雷,開發(fā)者就可以配置名稱、位置來給項目打zip包了。
使用 plugins
語法來給你的構建文件添加 base
插件碟婆。確保要在文件頭部添加 plugins {}
代碼塊电抚。
Gradle
plugins {
id "base"
}
... 構建文件的其他部分 ...
Kotlin
plugins {
id("base")
}
... 構建文件的其他部分 ...
現在,添加將 src
目錄打成zip包的任務:
Gradle
task zip(type: Zip, group: "Archive", description: "Archives sources in a zip file") {
from "src"
setArchiveName "basic-demo-1.0.zip"
}
Kotlin
tasks.create<Zip>("zip") {
description = "Archives sources in a zip file")
group = "Archive"
from("src")
setArchiveName("basic-demo-1.0.zip")
}
base
插件和設置協(xié)同工作竖共,可以在 build/distributions
文件夾下創(chuàng)建打包后的文件basic-demo-1.0.zip
蝙叛。
現在,簡單地運行新添加的 zip
任務公给,就能在對應位置看到生成的zip文件了借帘。
? ./gradlew zip
> Task :zip
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
構建的瀏覽或調試
讓我們來看看Gradle在我們的新項目中還能做些什么。我們也提供了完整的命令行接口參考手冊淌铐。
發(fā)掘可用的任務
tasks
命令會列出所有可用的Gradle任務肺然,包括通過 base
插件引入的任務和我們剛剛添加的那些自定義任務。
? ./gradlew tasks
> Task :tasks
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------
Archive tasks
-------------
zip - Archives sources in a zip file
Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
clean - Deletes the build directory.
Build Setup tasks
-----------------
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.
Custom tasks
------------
copy - Simply copies sources to a the build directory
Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project 'basic-demo'.
components - Displays the components produced by root project 'basic-demo'. [incubating]
dependencies - Displays all dependencies declared in root project 'basic-demo'.
dependencyInsight - Displays the insight into a specific dependency in root project 'basic-demo'.
dependentComponents - Displays the dependent components of components in root project 'basic-demo'. [incubating]
help - Displays a help message.
model - Displays the configuration model of root project 'basic-demo'. [incubating]
projects - Displays the sub-projects of root project 'basic-demo'.
properties - Displays the properties of root project 'basic-demo'.
tasks - Displays the tasks runnable from root project 'basic-demo'.
Verification tasks
------------------
check - Runs all checks.
Rules
-----
Pattern: clean<TaskName>: Cleans the output files of a task.
Pattern: build<ConfigurationName>: Assembles the artifacts of a configuration.
Pattern: upload<ConfigurationName>: Assembles and uploads the artifacts belonging to a configuration.
To see all tasks and more detail, run gradlew tasks --all
To see more detail about a task, run gradlew help --task <task>
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
構建的分析和調試
Gradle同時也提供了一個豐富的匣沼、基于web的頁面用于展示你的構建狰挡,其名為構建掃描
。
通過使用 --scan
參數或明確地在項目中啟用構建掃描插件释涛,你可以在scans.gradle.com免費地創(chuàng)建一個構建掃描加叁。將構建掃描發(fā)布到scans.gradle.com會將這些數據發(fā)送至Gradle服務器。要想使數據停留在您自己的服務器上唇撬,請考慮Gradle企業(yè)版它匕。
嘗試在執(zhí)行一個任務的時候加入 --scan
選項。
? ./gradlew zip --scan
BUILD SUCCESSFUL in 0s
1 actionable task: 1 up-to-date
Publishing a build scan to scans.gradle.com requires accepting the Terms of Service defined at https://scans.gradle.com/terms-of-service. Do you accept these terms? [yes, no]
Gradle Cloud Services license agreement accepted.
Publishing build scan...
https://gradle.com/s/repnge6srr5qs
通過瀏覽構建掃描結果窖认,你可以輕松地看到那些任務被執(zhí)行了豫柬、每個任務執(zhí)行的耗時、使用了哪些插件等等扑浸。當下次你在StackOverflow上調試什么東西的時候烧给,考慮分享一下構建掃描。
在構建掃描插件用戶手冊上可以學到更多關于構建掃描插件的配置和使用信息喝噪。
列舉可用屬性
properties
命令會告訴你項目的參數础嫡。
? ./gradlew properties
輸出結果非常長。下面是可用屬性的一部分:
> Task :properties
------------------------------------------------------------
Root project
------------------------------------------------------------
buildDir: /Users/.../basic-demo/build
buildFile: /Users/.../basic-demo/build.gradle.kts
description: null
group:
name: basic-demo
projectDir: /Users/.../basic-demo
version: unspecified
BUILD SUCCESSFUL
項目的 name
默認和所在文件夾的名稱是一致的酝惧。你也可以給 group
和 version
屬性指定值榴鼎,但現在它們和
description
一樣是使用的默認值。
buildFile
屬性是構建腳本的全名限定路徑晚唇,默認位于 projectDir
下巫财。
一些屬性是可以被修改的。例如在構建腳本文件中嘗試加入如下代碼行哩陕,然后重新執(zhí)行 gradle properties
平项。
description = "A trivial Gradle build"
version = "1.0"
接下來的步驟
恭喜赫舒!你已經學會如何創(chuàng)建一個新的Gradle構建并檢驗它!
你肯定希望創(chuàng)建針對特定平臺的庫或應用闽瓢,所以這里給出一些教程号阿,它們會知道你如何在選定的平臺上進行構建:
同時你也可以簽出一些GitHub上的Gradle構建示例。
幫忙改進本教程
尋求反饋或具有疑問鸳粉?發(fā)現拼寫錯誤?和所有的Gradle教程一樣园担,幫助就是一個GitHub的issue届谈。請在gradle-guides/creating-new-gradle-builds添加issue或拉取請求,我們會給您幫助弯汰。