gpt4 book ai didi

gradle - 如何在多平台多项目 Kotlin 构建中向另一个项目的测试添加依赖项

转载 作者:行者123 更新时间:2023-12-02 13:34:49 27 4
gpt4 key购买 nike

我有一个多平台的 Kotlin 项目,其中包含多个模块(子项目)。 Building Multiplatform Projects with Gradle Kotlin 的文档清楚地展示了如何设置模块之间的项目依赖关系:

kotlin {
sourceSets {
commonMain {
dependencies {
// All of the compilations that include source set 'commonMain'
// will get this dependency resolved to a compatible target, if any:
api project(':foo-lib')
}
}
}
}

我现在面临的问题是,虽然本文记录了如何将一个模块(其所有目标平台)的依赖关系添加到另一个模块(其相应的目标平台),但它并未阐明 如何将依赖项添加到另一个模块的测试源 .

我希望这是一个相当常见的用例。例如,我想这样做的原因之一是我的模块 A 的测试源包含 stub 类。模块 B 依赖于模块 A,包括在模块 A 的测试源中为其提供测试 stub 的类定义。因此,模块 B 的测试可能希望重用模块的测试源中定义的那些测试 stub 也就不足为奇了一种。

多项目构建中的一个常见建议是将此类测试源移动到另一个模块,但这对我来说似乎没有必要。我认为更清洁的解决方案 exist for normal multi-project builds ,但我不知道如何在多平台多项目 Kotlin 构建中配置等效项,该构建也依赖于上面代码中演示的 Kotlin Gradle DSL。

最佳答案

要在单平台项目之间建立这种依赖关系,您通常需要创建一个 Gradle Configuration在生产者项目中,将测试编译输出或测试 JAR 添加到该配置中,并且在消费者项目中,依赖于该配置(即添加 project(...) 依赖项 with an explicit configuration,或者更可取的是,添加属性以确保Gradle 在 variant-aware dependency resolution 中选择测试输出配置。

然而,所有这些都需要将测试编译成可以被消费者项目的公共(public)源集重用的形式。对于 Kotlin Multiplatform 项目,情况还不是这样。虽然参与已发布编译的生产通用源集被编译为 Kotlin 元数据(*.kotlin_metadata 文件),但测试源和其他类型的未发布代码尚未转换为该格式。

相反,测试目前仅编译为最终特定于平台的二进制文件(即 *.class 文件、*.js 、 native 二进制文件),不能用于常见源分析。

因此,尚不支持此类依赖项。这在 future 可能会改变。请在 Kotlin 问题跟踪器中关注此问题:KT-35073 .

关于gradle - 如何在多平台多项目 Kotlin 构建中向另一个项目的测试添加依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58956010/

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