多種方式創建任務
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$