gpt4 book ai didi

testing - Gradle:自动添加对项目的测试依赖

转载 作者:行者123 更新时间:2023-11-28 20:39:01 26 4
gpt4 key购买 nike

在多项目构建中,一些项目依赖于其他项目,后者不仅提供编译/运行时库,还提供有用的测试库(例如,它们提供的组件的“模拟”实现)。

我知道有几种方法可以让一个项目的测试源可供另一个项目使用。它们被讨论,例如作为 this question 的答案。 .

我正在寻找的是一些神奇的方法来自动实现这一点,这样如果一个子项目添加了对另一个子项目的依赖,它自动将项目测试源添加到 测试编译 配置。

我尝试了天真的方法:

configure(rootProject.subprojects.findAll {
it.configurations.getByName("compile")
.dependencies.any {
it.name == project.name
}
}) {
dependencies {
testCompile project.sourceSets.test.output
}
}

但这行不通……大概是因为这段代码是“在错误的阶段”(或任何正确的行话)求值的,而其他项目还不知道他们依赖于这个。

我也试过将它(等同于)放在根构建文件的末尾(希望到那时其他一切都已经配置好了),但这也不起作用。

有没有办法做我在这里寻找的东西?

最佳答案

I also tried putting (an equivalent of) this at the end of root build file

build.gradle 中的声明顺序无关紧要。 Gradle 构建生命周期有两个阶段,配置和执行。在配置中,读取各种 build.gradle 文件,并根据各种任务之间的隐式和显式依赖关系创建执行顺序图。

通常首先评估根 build.gradle,但可以使用 evaluationDependsOnChildren() 强制首先评估子项目

您可以监听构建周期的各种事件,而不是构建脚本中的位置,以在特定点运行某些东西。在您的情况下,您希望使用 afterEvaluate() block 评估所有项目后运行您的代码段。参见 example在这里。


整体方法的一些可能替代方案:

  • 从下游项目添加 testCompile 依赖项,而不是从上游项目注入(inject)。将此添加到根 build.gradle:

    subprojects {
    project.configurations.getByName("compile").dependencies.each {
    if (it.name == foo){ // could be expanded to if it.name in collection
    //inherit testCompile
    project.configurations.dependencies.testCompile += it.sourceSets.test.output
    }
    }
    }

    (伪代码,未测试)

  • 将可共享的测试/模拟组件分离到一个单独的模拟项目中,您可以将其作为 testCompile 依赖项添加到上游和下游项目中

关于testing - Gradle:自动添加对项目的测试依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41400543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com