我已经将我的 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>
.为了方便起见,任务依赖性不仅可以使用任务来表示,还可以通过传递稍后将解析为任务的其他对象(例如,包含任务名称的字符串)来表示。 current version of the Java plugin使用 Provider<Task>
注册任务之间的依赖关系 check
和任务 test
.只是删除对任务的依赖 test
,您需要遍历 dependsOn
中的所有依赖项并找到类型为 Provider
的那个返回任务 test
通过其 get()
方法。然后你可以删除那个 Provider
来自 dependsOn
.
如您所见,一旦任务依赖项被注册,就可以删除它们,但这并不容易,因此您可能应该遵循约定并使用任务 test
。用于单元测试。
关于java - Gradle 覆盖默认检查任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65181167/