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"
posted @ 2020-09-17 01:55  zhouweixin  阅读(1628)  评论(0编辑  收藏  举报