【发布时间】:2017-05-15 00:12:57
【问题描述】:
在多项目构建中,一些项目依赖于其他项目,后者不仅提供编译/运行时库,还提供有用的测试库(例如,它们提供的组件的“模拟”实现)。
我知道有几种方法可以将一个项目的测试源提供给另一个项目。它们被讨论,例如作为this question 的答案。
我正在寻找一些神奇的方法来自动实现这一点,这样如果一个子项目添加了对另一个子项目的依赖项,它自动将该项目测试源添加到testCompile配置。
我尝试了幼稚的方法:
configure(rootProject.subprojects.findAll {
it.configurations.getByName("compile")
.dependencies.any {
it.name == project.name
}
}) {
dependencies {
testCompile project.sourceSets.test.output
}
}
但这不起作用......大概是因为这段代码是在“错误的阶段”(或任何正确的术语)评估的,而其他项目 还不“知道”他们依赖于这个。
我还尝试将(等价的)这个放在根构建文件的末尾(希望到那时其他所有东西都已经配置好了),但这也不起作用。
有没有办法做我在这里寻找的东西?
【问题讨论】:
-
你不应该做
.getByName("test")和/或.getByName("testCompile")吗? -
也可以尝试将您的 sn-p 粘贴在
afterEvaluate块中,例如:docs.gradle.org/current/userguide/… -
不,我想在这里
getByName('compile')。这个想法是如果“编译”依赖于这个项目,那么“testCompile”需要依赖于测试源。 -
@RaGe 所以,我尝试使用您关于使用
afterEvaluate的建议,并且几乎成功了!我仍然遇到的一个问题是我在主build.gradle中定义了一个闭包exportTests,如果我在同一个文件中调用它,它会执行我想要的操作,例如exportTest(project(':notifications')),这有点笨拙。我更喜欢从notifications/build.gradle中调用它,就像exportTests(project)一样,但是说“未定义导出测试”,即使文档似乎建议在根项目上定义的闭包应该由孩子继承。有什么想法吗? -
尝试在子项目中以
rootProject.closureVar的身份访问它?
标签: testing gradle dependencies