Gradle覆盖默认检查任务
我已经将我的 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()返回 aSet<Object>而不是 a Set<Task>。为方便起见,任务依赖性不仅可以使用任务来表达,还可以通过传递稍后将解析为任务的其他对象(例如,包含任务名称的字符串)来表达。该Java插件的最新版本采用的是Provider<Task>注册任务之间的依赖关系check和任务test。要移除对任务的依赖test,您需要遍历所有依赖dependsOn并找到Provider返回任务类型的依赖。test通过其get()方法。然后您可以将其Provider从dependsOn.
如您所见,可以在注册后删除任务依赖项,但这并不容易,因此您可能应该遵循约定并将任务test用于单元测试。