java - 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
用于单元测试。
要真正回答您的问题,您可以使用 and 访问和修改每个任务的依赖关系getDependsOn()
,setDependsOn(Iterable<?>)
因此您的问题的简单解决方案可能是以下代码:
check {
dependsOn.clear()
dependsOn unitTest
}
这会从任务中删除所有任务依赖项check
,然后添加对任务的依赖项unitTest
。但是,这可能会导致新的问题,因为其他插件可能会自动注册任务依赖项,check
这也将被删除。
对上面代码的一个明显改进是只删除对test
任务的依赖,而不是所有的任务依赖。可悲的是,这并不像人们想象的那么简单。您可能已经注意到该方法getDependsOn()
返回 aSet<Object>
而不是 a Set<Task>
。为方便起见,任务依赖关系不仅可以使用任务来表达,还可以通过传递稍后将解析为任务的其他对象(例如,包含任务名称的字符串)来表达。当前版本的 Java 插件使用 a来注册 task和 taskProvider<Task>
之间的依赖关系。要删除对任务的依赖项,您需要遍历所有依赖项并找到具有返回任务类型的依赖项check
test
test
dependsOn
Provider
test
通过它的get()
方法。然后,您可以将其Provider
从dependsOn
.
如您所见,一旦注册了任务依赖项,就可以删除它们,但这并不容易,因此您可能应该遵循约定并将任务test
用于单元测试。
推荐阅读
- perl - 如何从 perl 中的 fstat 获取本地 mtime?
- powershell - Is it possible to register powershell scheduled job from another scheduled job?
- python-3.x - Query Oracle database from Cloud Foundry using Python
- r - Pivot_longer 6 列到 3 列
- c++ - 尝试在 C++ 中将节点添加到链接列表的末尾时出现分段错误(核心转储)错误
- python - 编写循环:Beautifulsoup 和 lxml 用于在逐页跳过设置中获取页面内容
- c++ - 将指针传递给 std::thread 时的数据竞争
- r - R 组成 n 个子群的群(超群)
- google-api - 来自 html 的谷歌文档 - 不一致地包括图像
- c++ - 使用 qt-faststart 和“ffmpeg -movflags +faststart”的不同结果