多种方式创建任务
def Task ex41CreateTask1 = task(ex41CreateTask1)
ex41CreateTask1.doLast {
println "创建方法原型为:Task task(String name) throws InvalidUserDataException"
}
def Task ex41CreateTask2 = task(ex41CreateTask2,group:BasePlugin.BUILD_GROUP)
ex41CreateTask2.doLast {
println "创建方法原型为:Task task(Map<String, ?> args, String name) throws InvalidUserDataException"
println "任务分组:${ex41CreateTask2.group}"
}
task ex41CreateTask3 {
description '演示任务创建'
doLast {
println "创建方法原型为:Task task(String name, Closure configureClosure)"
println "任务描述:${description}"
}
}
tasks.create('ex41CreateTask4') {
description '演示任务创建'
doLast {
println "创建方法原型为:Task create(String name, Closure configureClosure) throws InvalidUserDataException"
println "任务描述:${description}"
}
}
liuhailongdeAir:testdradle liuhailong$ gradle ex41CreateTask1 ex41CreateTask2 ex41CreateTask3 ex41CreateTask4
> Task :ex41CreateTask1
创建方法原型为:Task task(String name) throws InvalidUserDataException
> Task :ex41CreateTask2
创建方法原型为:Task task(Map<String, ?> args, String name) throws InvalidUserDataException
任务分组:build
> Task :ex41CreateTask3
创建方法原型为:Task task(String name, Closure configureClosure)
任务描述:演示任务创建
> Task :ex41CreateTask4
创建方法原型为:Task create(String name, Closure configureClosure) throws InvalidUserDataException
任务描述:演示任务创建
BUILD SUCCESSFUL in 2s
4 actionable tasks: 4 executed
liuhailongdeAir:testdradle liuhailong$
多种方式访问任务
task ex42AccessTask1
ex42AccessTask1.doLast {
println 'ex42AccessTask1.doLast'
}
task ex42AccessTask2
tasks['ex42AccessTask2'].doLast {
println 'ex42AccessTask2.doLast'
}
task ex42AccessTask3
tasks['ex42AccessTask3'].doLast {
println '集合方式'
println tasks.findByPath(':example42:ex42AccessTask3')
println tasks.getByPath(':example42:ex42AccessTask3')
println tasks.findByPath(':example42:asdfasdfasdf')
}
task ex42AccessTask4
tasks['ex42AccessTask4'].doLast {
println tasks.findByName('ex42AccessTask4')
println tasks.getByName('ex42AccessTask4')
println tasks.findByName('asdfasdfasdf')
}
liuhailongdeAir:testdradle liuhailong$ gradle ex42AccessTask1 ex42AccessTask2 ex42AccessTask3 ex42AccessTask4
> Task :ex42AccessTask1
ex42AccessTask1.doLast
> Task :ex42AccessTask2
ex42AccessTask2.doLast
> Task :ex42AccessTask3 FAILED
集合方式
null
FAILURE: Build failed with an exception.
* Where:
Build file '/Users/liuhailong/Desktop/testdradle/build.gradle' line: 15
* What went wrong:
Execution failed for task ':ex42AccessTask3'.
> Task with path ':example42:ex42AccessTask3' not found in root project 'testdradle'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 0s
3 actionable tasks: 3 executed
liuhailongdeAir:testdradle liuhailong$
任务分组和描述
def Task myTask = task ex43GroupTask
myTask.group = BasePlugin.BUILD_GROUP
myTask.description = '这是一个构建的引导任务'
myTask.doLast {
println "group:${group},description:${description}"
}
liuhailongdeAir:testdradle liuhailong$ gradle ex43GroupTask
> Task :ex43GroupTask
group:build,description:这是一个构建的引导任务
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liuhailongdeAir:testdradle liuhailong$
<<操作符其实为 doLast 方法的短标记形式 相当你简写
任务的执行分析
def Task myTask = task ex45CustomTask(type: CustomTask)
myTask.doFirst{
println 'Task执行之前执行 in doFirst'
}
myTask.doLast{
println 'Task执行之后执行 in doLast'
}
class CustomTask extends DefaultTask {
@TaskAction
def doSelf() {
println 'Task自己本身在执行 in doSelf'
}
}
liuhailongdeAir:testdradle liuhailong$ gradle ex45CustomTask
> Task :ex45CustomTask
Task执行之前执行 in doFirst
Task自己本身在执行 in doSelf
Task执行之后执行 in doLast
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liuhailongdeAir:testdradle liuhailong$
任务顺序与启用 禁用
task ex46OrderTask1 << {
println 'ex46OrderTask1'
}
task ex46OrderTask2 << {
println 'ex46OrderTask2'
}
ex46OrderTask1.mustRunAfter ex46OrderTask2
task ex47DisenabledTask << {
println 'ex47DisenabledTask'
}
//ex47DisenabledTask.enabled =false
ex47DisenabledTask.enabled =false
liuhailongdeAir:testdradle liuhailong$ gradle ex46OrderTask1 ex47DisenabledTask
> Task :ex46OrderTask1
ex46OrderTask1
> Task :ex47DisenabledTask
ex47DisenabledTask
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 0s
2 actionable tasks: 2 executed
liuhailongdeAir:testdradle liuhailong$ gradle ex46OrderTask1 ex47DisenabledTask
> Task :ex46OrderTask1
ex46OrderTask1
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liuhailongdeAir:testdradle liuhailong$
断言
final String BUILD_APPS_ALL="all";
final String BUILD_APPS_SHOUFA="shoufa";
final String BUILD_APPS_EXCLUDE_SHOUFA="exclude_shoufa";
task ex48QQRelease << {
println "打应用宝的包"
}
task ex48BaiduRelease << {
println "打百度的包"
}
task ex48HuaweiRelease << {
println "打华为的包"
}
task ex48MiuiRelease << {
println "打Miui的包"
}
task build {
group BasePlugin.BUILD_GROUP
description "打渠道包"
}
build.dependsOn ex48QQRelease,ex48BaiduRelease,ex48HuaweiRelease,ex48MiuiRelease
ex48QQRelease.onlyIf {
def execute = false;
if(project.hasProperty("build_apps")){
Object buildApps = project.property("build_apps")
if(BUILD_APPS_SHOUFA.equals(buildApps)
|| BUILD_APPS_ALL.equals(buildApps)){
execute = true
}else{
execute = false
}
}else{
execute = true
}
execute
}
ex48BaiduRelease.onlyIf {
def execute = false;
if(project.hasProperty("build_apps")){
Object buildApps = project.property("build_apps")
if(BUILD_APPS_SHOUFA.equals(buildApps)
|| BUILD_APPS_ALL.equals(buildApps)){
execute = true
}else{
execute = false
}
}else{
execute = true
}
execute
}
ex48HuaweiRelease.onlyIf {
def execute = false;
if(project.hasProperty("build_apps")){
Object buildApps = project.property("build_apps")
if(BUILD_APPS_EXCLUDE_SHOUFA.equals(buildApps)
|| BUILD_APPS_ALL.equals(buildApps)){
execute = true
}else{
execute = false
}
}else{
execute = true
}
execute
}
ex48MiuiRelease.onlyIf {
def execute = false;
if(project.hasProperty("build_apps")){
Object buildApps = project.property("build_apps")
if(BUILD_APPS_EXCLUDE_SHOUFA.equals(buildApps)
|| BUILD_APPS_ALL.equals(buildApps)){
execute = true
}else{
execute = false
}
}else{
execute = true
}
execute
}
liuhailongdeAir:testdradle liuhailong$ gradle ex48QQRelease ex48BaiduRelease ex48HuaweiRelease ex48MiuiRelease
> Task :ex48QQRelease
打应用宝的包
> Task :ex48BaiduRelease
打百度的包
> Task :ex48HuaweiRelease
打华为的包
> Task :ex48MiuiRelease
打Miui的包
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 0s
4 actionable tasks: 4 executed
liuhailongdeAir:testdradle liuhailong$
任务规则
tasks.addRule("对该规则的一个描述,便于调试、查看等") { String taskName ->
task(taskName) << {
println "该${taskName}任务不存在,请查证后再执行"
}
}
task ex49RuleTask {
dependsOn missTask
}
liuhailongdeAir:testdradle liuhailong$ gradle ex49RuleTask
> Task :missTask
该missTask任务不存在,请查证后再执行
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liuhailongdeAir:testdradle liuhailong$
插件
//version.gradle
ext {
versionName = '1.0.0'
versionCode = 1
}
build.gradle
plugins {
id 'java'
}
apply plugin:'java'
apply plugin:org.gradle.api.plugins.JavaPlugin
apply plugin:JavaPlugin
apply {
plugin 'java'
println "java"
}
apply(new Action<ObjectConfigurationAction>() {
@Override
void execute(ObjectConfigurationAction objectConfigurationAction) {
objectConfigurationAction.plugin('java')
}
})
apply from:'version.gradle'
task ex52PrintlnTask << {
println "App版本是:${versionName},版本号是:${versionCode}"
}
liuhailongdeAir:testdradle liuhailong$ gradle ex52PrintlnTask
> Configure project :
java
> Task :ex52PrintlnTask
App版本是:1.0.0,版本号是:1
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liuhailongdeAir:testdradle liuhailong$
转载于:https://blog.51cto.com/haidragon/2173999