前言
本章你將學習
- 創建一個簡單的Gradle Project
- 調用一些基本的Gradle命令
1 初始化Project
首先, 創建一個新的Project文件夾, 並進入
mkdir demo1 && cd demo1
接着用gradle init命令生成一個簡單的Project, 過程中會提示做一些選擇
- Project的類型, 默認為basic
- DSL腳本語言, 默認為groovy
- Project名稱, 默認為文件夾名相同
$ gradle init
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4] 1
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2] 1
Project name (default: demo1):
> Task :init
Get more help with your project: https://guides.gradle.org/creating-new-gradle-builds
BUILD SUCCESSFUL in 10s
2 actionable tasks: 2 executed
Project的目錄結構如下
.
├── build.gradle # project構建腳本
├── gradle
│ └── wrapper # 用於構建gradle的腳本, 用於快速安裝gradle
│ ├── gradle-wrapper.jar # gradle wrapper可執行jar包
│ └── gradle-wrapper.properties # gradle wrapper配置屬性
├── gradlew # Unix系統的腳本
├── gradlew.bat # Windows系統的腳本
└── settings.gradle # 配置腳本, 用於配置Gradle build
2 Task的創建
- 一個Project包含多個Tasks, 每個Task具有一些基礎的功能
- Gradle的DSL語言是基於Groovy或Kotlin的
- Gradle具有一個任務庫, 可以用於配置個人的Project, 如Copy, Zip
2.1 Task使用示例: Copy
目標
通過復制src目錄了解Copy任務的使用
流程
- 在demo1項目中創建
src/hello.txt, 輸入內容Hello world - 創建Copy任務並執行, 完成src到dest的復制功能
首先, 創建文件
mkdir src && echo "Hello world" > src/hello.txt
接着在build.gradle中創建Task, type是必填項, 指定任務類型; group和description可隨意填寫
task copy(type: Copy, group: "Custom", description: "Copies sources to the dest directory") {
from "src"
into "dest"
}
最后執行copy任務, 將會看到完成了src文件夾到dest的復制
$ ./gradlew copy
BUILD SUCCESSFUL in 773ms
1 actionable task: 1 executed
需要注意的是, 命令中的./gradlew也可以替換為gradle, 區別在於
gradle命令需要使用者配置完成gradle環境, 並將該gradle命令添加到了環境變量path中./gradlew命令不需要配置gradle環境, 擁有該Project便可直接使用該命令
2.2 Task使用示例: Zip
目標
通過打包src目錄了解Zip任務的使用及Gradle插件的使用
流程
- 引用插件base實現Zip任務參數的自動化配置
- 創建任務zip
首先,在build.gradle中引入插件base,需要說明的是插件必須在文件的開頭,更多的插件可以參考the Gradle plugin portal
接着添加任務zip
plugins {
id "base"
}
task zip(type: Zip, group: "Archive", description: "Archives sources in a zip file") {
from "src"
archiveFileName = "demo1.zip"
}
最后執行zip任務,將會看到完成了src文件的打包,生成的demo1.zip文件在文件夾build/distributions下,即插件base的配置
$ gradle zip
BUILD SUCCESSFUL in 434ms
1 actionable task: 1 executed
3 Gradle的其它命令
3.1 查詢所有任務
$ gradle -q tasks
------------------------------------------------------------
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 - Copies sources to the dest directory
Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project 'demo1'.
components - Displays the components produced by root project 'demo1'. [incubating]
dependencies - Displays all dependencies declared in root project 'demo1'.
dependencyInsight - Displays the insight into a specific dependency in root project 'demo1'.
dependentComponents - Displays the dependent components of components in root project 'demo1'. [incubating]
help - Displays a help message.
model - Displays the configuration model of root project 'demo1'. [incubating]
outgoingVariants - Displays the outgoing variants of root project 'demo1'.
projects - Displays the sub-projects of root project 'demo1'.
properties - Displays the properties of root project 'demo1'.
tasks - Displays the tasks runnable from root project 'demo1'.
Verification tasks
------------------
check - Runs all checks.
從任務中你可以看到gradle定義了許多任務可以直接使用,且剛剛創建的copy任務和zip任務也在其中
3.2 properties任務
$ ./gradlew properties
> Task :properties
------------------------------------------------------------
Root project
------------------------------------------------------------
allprojects: [root project 'demo1']
ant: org.gradle.api.internal.project.DefaultAntBuilder@65ef4880
antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@6ca45041
archivesBaseName: demo1
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@345e652f
asDynamicObject: DynamicObject for root project 'demo1'
baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@267cc739
buildDir: /Users/zhouweixin/gradle-demos/demo1/build
buildFile: /Users/zhouweixin/gradle-demos/demo1/build.gradle
copy: task ':copy'
taskThatOwnsThisObject: null
tasks: task set
version: unspecified
zip: task ':zip'
...
你可以看到許多關於demo1工程的屬性信息,zip任務打包的路徑即是在此處buildDir設置的
buildFile屬性是指定腳本文件
假如你想修改一些屬性,比如version,只需要在build.gradle里設置即可
version的修改示例如下,再次執行properties任務,可以直到version由unspecified修改成了1.1
version="1.1"
