Gradle 覆盖默认检查任务
Gradle override the default check task
我将我的 sourceSets 定义为
sourceSets {
// Configuring SourceSets for all connector source files.
main {
java {
srcDirs = ['src']
}
}
test {
// integrationTests
}
unitTests {
//unitTests
}
}
test {
// integrationTests
}
task('unitTest', type: Test) {
//unitTests
}
当我开始 ./gradlew build
时,check
任务基本上调用 test
目标。
我可以覆盖默认 gradle build
任务的 'check' 机制来调用 unitTest
而不是 test
吗?
首先,请考虑仅使用任务 test
进行单元测试,并使用另一个源集进行集成测试。 Gradle 及其插件遵循一种称为 约定优于配置 的方法,Java 插件的约定是使用任务 test
进行单元测试。
要真正回答您的问题,您可以使用 getDependsOn()
and setDependsOn(Iterable<?>)
访问和修改每个任务的依赖关系,因此您的问题的简单解决方案可能是以下代码:
check {
dependsOn.clear()
dependsOn unitTest
}
这将从任务 check
中删除所有任务依赖性,然后添加对任务 unitTest
的依赖性。但是,这可能会导致新的问题,因为其他插件可能会自动为 check
注册任务依赖项,这些依赖项也将被删除。
上述代码的一个明显改进是只删除对 test
任务的依赖,而不是所有任务的依赖。可悲的是,这并不像人们想象的那么简单。您可能已经注意到方法 getDependsOn()
returns 是 Set<Object>
而不是 Set<Task>
。为了方便起见,任务依赖性不仅可以使用任务来表示,还可以通过传递稍后将解析为任务的其他对象(例如,包含任务名称的字符串)来表示。 current version of the Java plugin uses a Provider<Task>
to register the dependency between the task check
and the task test
. To just remove the dependency on the task test
, you would need to iterate over all dependencies in dependsOn
and find the one with the type Provider
that returns the task test
via its get()
方法。然后,您可以从 dependsOn
.
中删除 Provider
如您所见,一旦任务依赖项被注册,就可以删除它们,但这并不容易,因此您可能应该遵循惯例并使用任务 test
进行单元测试.
我将我的 sourceSets 定义为
sourceSets {
// Configuring SourceSets for all connector source files.
main {
java {
srcDirs = ['src']
}
}
test {
// integrationTests
}
unitTests {
//unitTests
}
}
test {
// integrationTests
}
task('unitTest', type: Test) {
//unitTests
}
当我开始 ./gradlew build
时,check
任务基本上调用 test
目标。
我可以覆盖默认 gradle build
任务的 'check' 机制来调用 unitTest
而不是 test
吗?
首先,请考虑仅使用任务 test
进行单元测试,并使用另一个源集进行集成测试。 Gradle 及其插件遵循一种称为 约定优于配置 的方法,Java 插件的约定是使用任务 test
进行单元测试。
要真正回答您的问题,您可以使用 getDependsOn()
and setDependsOn(Iterable<?>)
访问和修改每个任务的依赖关系,因此您的问题的简单解决方案可能是以下代码:
check {
dependsOn.clear()
dependsOn unitTest
}
这将从任务 check
中删除所有任务依赖性,然后添加对任务 unitTest
的依赖性。但是,这可能会导致新的问题,因为其他插件可能会自动为 check
注册任务依赖项,这些依赖项也将被删除。
上述代码的一个明显改进是只删除对 test
任务的依赖,而不是所有任务的依赖。可悲的是,这并不像人们想象的那么简单。您可能已经注意到方法 getDependsOn()
returns 是 Set<Object>
而不是 Set<Task>
。为了方便起见,任务依赖性不仅可以使用任务来表示,还可以通过传递稍后将解析为任务的其他对象(例如,包含任务名称的字符串)来表示。 current version of the Java plugin uses a Provider<Task>
to register the dependency between the task check
and the task test
. To just remove the dependency on the task test
, you would need to iterate over all dependencies in dependsOn
and find the one with the type Provider
that returns the task test
via its get()
方法。然后,您可以从 dependsOn
.
Provider
如您所见,一旦任务依赖项被注册,就可以删除它们,但这并不容易,因此您可能应该遵循惯例并使用任务 test
进行单元测试.