Gradle實戰(02)--Gradle Build的創建


上一節:Gradle實戰(01)--介紹與安裝

前言

本章你將學習

  1. 創建一個簡單的Gradle Project
  2. 調用一些基本的Gradle命令

1 初始化Project

首先, 創建一個新的Project文件夾, 並進入

mkdir demo1 && cd demo1

接着用gradle init命令生成一個簡單的Project, 過程中會提示做一些選擇

  1. Project的類型, 默認為basic
  2. DSL腳本語言, 默認為groovy
  3. 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的創建

  1. 一個Project包含多個Tasks, 每個Task具有一些基礎的功能
  2. Gradle的DSL語言是基於Groovy或Kotlin的
  3. Gradle具有一個任務庫, 可以用於配置個人的Project, 如Copy, Zip

2.1 Task使用示例: Copy

目標

通過復制src目錄了解Copy任務的使用

流程

  1. 在demo1項目中創建src/hello.txt, 輸入內容Hello world
  2. 創建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, 區別在於

  1. gradle命令需要使用者配置完成gradle環境, 並將該gradle命令添加到了環境變量path中
  2. ./gradlew命令不需要配置gradle環境, 擁有該Project便可直接使用該命令

2.2 Task使用示例: Zip

目標

通過打包src目錄了解Zip任務的使用及Gradle插件的使用

流程

  1. 引用插件base實現Zip任務參數的自動化配置
  2. 創建任務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"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM