假设我从cmd行执行了一组任务,并且可以正常工作:
gradle processReleaseManifest compileReleaseSources run assembleRelease
我定义的任务在这里运行。
所以我的要求是我需要创建一个执行上述4个任务的任务,
例如说新任务abc,以相同的顺序运行上述任务,
我知道我不能在这种情况下使用dependsOn,因为processReleaseManifest compileReleaseSource在显示的构建gradle中使用时,
无法获得类型为
'assembleRelease'
的项目':app'
的未知属性org.gradle.api.Project
。那么解决方案是什么?
最佳答案
您可以使用@ lu.koerfer的答案表示,它使用dependsOn列表中的字符串来引用在构建文件中进一步定义的任务。
换句话说,这有效:
task foo {}
task bar(dependsOn: [foo]) {}
这也适用:
task bar(dependsOn: ['foo']) {}
task foo {}
现在,要使任务按顺序运行,您希望事情并没有那么简单。
dependsOn
属性仅告诉任务在任务本身运行之前需要运行哪些任务。它不会告诉gradle按照dependsOn
子句中定义的顺序运行任务。一个例子:
task one {}
task two {}
task three {}
task run(dependsOn: [one, two, three]) {}
运行时将导致以下输出:
~> gradle run
:one UP-TO-DATE
:three UP-TO-DATE
:two UP-TO-DATE
:run UP-TO-DATE
BUILD SUCCESSFUL
...请注意以下事实:我们没有按照
one
,two
,three
和run
的顺序运行。换句话说,命令行调用会强制任务以定义的顺序运行,而
dependsOn
是一个集合,没有顺序。您可以通过几种方法使任务按所需顺序运行。一种是定义对任务的依赖关系(这可能是通用路径):
task one {}
task two(dependsOn: ['one']) {}
task three(dependsOn: ['two']) {}
task run(dependsOn: [one, two, three]) {}
结果是:
~> gradle run
:one UP-TO-DATE
:two UP-TO-DATE
:three UP-TO-DATE
:run UP-TO-DATE
BUILD SUCCESSFUL
另一种方法是使用gradle更高版本中添加的task ordering constructs。
另外,如果您需要向文件中较早位置定义的任务添加任务依赖项,则可以通过以下方式进行操作:
task foo {}
someTaskDefinedFurtherUp.dependsOn 'foo'
它将任务
foo
添加到someTaskDefinedFurtherUp
的依赖项中。
关于android - 在没有DependOn的任务中运行成绩任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50871078/