创建Gradle项目(demo2 --> example1)创建目录
❯ mkdir example1
❯ cd example1初始化一个Gradle项目,使用gradle的init命令
❯ gradle init
Starting a Gradle Daemon (subsequent builds will be faster)
BUILD SUCCESSFUL in 3s
2 actionable tasks: 2 executed初始化后的项目结构
├── build.gradle // 用于配置当前项目的Gradle构建脚本
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar // gradlew 的可执行JAR包
│ └── gradle-wrapper.properties // gradlew 的配置属性
├── gradlew // 基于 unix 的系统的 Gradlew 脚本
├── gradlew.bat // 基于 windows 的系统的 Gradlew 脚本
└── settings.gradle // 用于配置 Gradle 构建的 Gradle 设置脚本
创建一个Task
在 Gradle 中定义 Task 的时候,可以指定更多的参数,如下所示:
参数名含义默认值nametask的名字必须指定,不能为空typetask的父类默认值为org.gradle.api.DefaultTask,类型有copy、jar、Delete 等等 可以参考Doc文档overwrite是否替换已经存在的同名taskfalsegrouptask所属的分组名nulldescriptiontask的描述nulldependsOntask依赖的task集合无constructorArgs构造函数参数无在项目中新建src目录,创建一个myfile.txt的文件
mkdir src
echo "Hello,world" >> src/myfile.txt在build.gradle文件中,写入以下代码:
task copy(type: Copy, group: "Custom", description: "Copies sources to the dest directory") {
from "src"
into "dest"
}
// group 和 description 可以是想要的任何内容执行创建的 copy 的 task :
❯ ./gradlew copy
> Task :copy
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
// 通过检查dest目录中现在有一个名为myfile.txt的文件,并且它的内容与src目录中相同文件的内容相匹配,来验证它是否按预期工作。
自定义Task 类型 ( demo --> example2 )
Gradle 中通过 class 关键字创建的 task,默认的父类都是 org.gradle.api.DefaultTask,这里定义了一些 task 的默认行为。看看下面这个例子:
//自定义Task类,必须继承自DefaultTask
class SayHelloTask extends DefaultTask {
String msg = "default name"
int age = 18
//构造函数必须用@javax.inject.Inject注解标识
@javax.inject.Inject
SayHelloTask(int age) {
this.age = age
}
//通过@TaskAction注解来标识该Task要执行的动作
@TaskAction
void sayHello() {
println "Hello $msg ! age is ${age}"
}
}
//通过constructorArgs参数来指定构造函数的参数值
task hello1(type: SayHelloTask, constructorArgs: [30])
//通过type参数指定task的父类,可以在配置代码里修改父类的属性
task hello2(type: SayHelloTask, constructorArgs: [18]) {
//配置代码里修改 SayHelloTask 里的字段 msg 的值
msg = "hjy"
}
gradle 生命周期管理 (demo2 --> example5)
gradle的构建分为初期化/配置/执行三个