前言
本章你将学习
- 创建一个简单的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"