gradle学习2-任务

Posted ityousee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gradle学习2-任务相关的知识,希望对你有一定的参考价值。

前言

每个项目都由不同的任务组成,任务可以是编译一些类,将类文件存储到单独的目标文件夹中,创建JAR,生成Javadoc或将一些归档发布到存储库。

定义任务

创建一个叫作 hello 的任务,将打印一个字符串:hello ityousee。将以下脚本复制并保存到build.gradle文件中。 此构建脚本定义一个名称为 “hello” 的任务,用于打印hello ityousee`字符串。

task hello {
  doLast {
     println 'hello ityousee'
  }
}
或者以下方式简化操作:
task hello <<{
     println 'hello ityousee'
}

切换到该文件所在目录,打开cmd窗口,运行gradle -q hello运行结果如下:

hello ityousee

任务依赖关系

一个任务可以依赖于其他任务完成后才执行,输入如下代码,保存到build.gradle文件中

task hello << {
   println 'Hello ityousee!'
}
task hello2(dependsOn: hello) << {
   println "Hello ityousee2!"
}

切换到该文件所在目录,打开cmd窗口,运行gradle -q hello2 运行结果如下:

Hello ityousee2!
Hello ityousee!

上面的例子是通过使用名字添加对任务的依赖。 还有另一种方法实现任务依赖性,即使用Task对象定义依赖性。

将以下代码复制并保存到build.gradle文件中,输出结果与上面一致。

task hello << {
   println 'Hello ityousee!'
}
task hello2 << {
   println "Hello ityousee2!"
}
task hello2.dependsOn hello

还有另一种方法来添加任务依赖,它就是通过使用闭包。

将以下代码复制并保存到build.gradle文件中。

task taskX << {
  println 'taskX'
}
taskX.dependsOn {
  tasks.findAll {
    task -> task.name.startsWith('lib')
  }
}
task lib1 << {
  println 'lib1'
}
task lib2 << {
  println 'lib2'
}
task notALib << {
  println 'notALib'
}

在存储 build.gradle 文件的目录位置执行以下命令,应该看到输出结果如下 

lib1
lib2
taskX

定位任务

如果要查找在构建文件中定义的任务,则必须使用相应的标准项目属性。这意味着每个任务都可以作为项目的属性,使用任务名称作为属性名称。

将以下代码复制并保存到build.gradle文件中。

task hello
println hello.name
println project.hello.name

在存储 build.gradle 文件的目录位置执行gradle -q hello,应该看到输出结果如下 

hello
hello

您还可以通过任务集合使用所有属性。
将以下代码复制并保存到build.gradle文件中。

task hello
println tasks.hello.name
println tasks['hello'].name

在存储 build.gradle 文件的目录位置执行gradle -q hello,应该看到输出结果如下 

hello
hello

通过路径访问任务

将以下代码复制并保存到build.gradle文件中。

project(':projectA') {
   task hello
}
task hello
println tasks.getByPath('hello').path
println tasks.getByPath(':hello').path
println tasks.getByPath('projectA:hello').path
println tasks.getByPath(':projectA:hello').path  

在存储 build.gradle 文件的目录位置执行gradle -q hello,应该看到输出结果如下

:hello
:hello
:projectA:hello
:projectA:hello  

向任务添加描述

可以向任务添加描述。 执行Gradle任务时会显示此描述。 这可以通过使用description关键字。
将以下代码复制并保存到build.gradle文件中。

task copy(type: Copy) {
  description 'Copies the resource directory to the target directory.'
  from 'resources'
  into 'target'
  include('**/*.txt', '**/*.xml', '**/*.properties')
  println("description applied")
}

在存储 build.gradle 文件的目录位置执行gradle -q copy,应该看到输出结果如下

description applied

跳过任务

如果用于跳过任务的逻辑不能用谓词表示,则可以使用StopExecutionException。 如果操作抛出此异常,则会跳过此操作的进一步执行以及此任务的任何后续操作的执行。 构建继续执行下一个任务。
将以下代码复制并保存到build.gradle文件中。

task compile << {
   println 'We are doing the compile.'
}
compile.doFirst {
   // Here you would put arbitrary conditions in real life.
   // But this is used in an integration test so we want defined behavior.
   if (true) { throw new StopExecutionException() }
}
task myTask(dependsOn: 'compile') << {
  println 'I am not affected'
}

在存储 build.gradle 文件的目录位置执行gradle -q myTask,应该看到输出结果如下 -

I am not affected


以上是关于gradle学习2-任务的主要内容,如果未能解决你的问题,请参考以下文章

片段内部静态类和gradle问题

如何解决“异常:Gradle 任务 assembleDebug 失败,退出代码 1”?

将 maven 代码生成转换为 gradle 任务

Gradle 引入本地定制 jar 包

Gradle 任务 -- << 操作符

Android Gradle 插件自定义 Gradle 任务 ⑪ ( Gradle 任务分组 | 为自定义 Gradle 任务指定分组 | 为自定义 Gradle任务指定任务描述 | 代码示例 )