[英]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
任务的“检查”机制以在此处调用unitTest
而不是test
吗?
首先,请考虑仅将任务test
用于单元测试并使用另一个源集进行集成测试。 Gradle 及其插件遵循称为约定优于配置的方法,并且 Java 插件的约定是使用任务test
进行单元测试。
要真正回答您的问题,您可以使用getDependsOn()
和setDependsOn(Iterable<?>)
访问和修改每个任务的依赖关系,因此您的问题的简单解决方案可能是以下代码:
check {
dependsOn.clear()
dependsOn unitTest
}
这会从任务check
中删除所有任务依赖项,然后添加对任务unitTest
的依赖项。 但是,这可能会导致新的问题,因为其他插件可能会自动注册任务依赖项以进行check
,也将被删除。
对上面代码的一个明显改进是只删除对test
任务的依赖而不是所有任务依赖。 可悲的是,这并不像人们想象的那么简单。 您可能已经注意到方法getDependsOn()
返回一个Set<Object>
而不是Set<Task>
。 为方便起见,任务依赖关系不仅可以使用任务来表达,还可以通过传递稍后将解析为任务的其他对象(例如,包含任务名称的字符串)来表达。 当前版本的 Java 插件使用Provider<Task>
来注册任务check
和任务test
之间的依赖关系。 要仅删除对任务test
的依赖,您需要遍历dependsOn
中的所有依赖项,并找到类型为Provider
的依赖项,该类型通过其get()
方法返回任务test
。 然后,您可以从dependsOn
中删除该Provider
。
如您所见,一旦注册了任务依赖项,就可以删除它们,但这并不容易,因此您可能应该遵循约定并使用任务test
进行单元测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.