You need to enable JavaScript to run this app. sbt中dependsOn的compile->compile;test->test配置作用及差异对比
优惠活动
大模型
产品
解决方案
定价
更多

sbt中dependsOn的compile->compile;test->test配置作用及差异对比

sbt项目依赖dependsOn配置映射规则说明

首先明确sbt依赖配置中A->B的核心规则:当前项目的A配置,依赖被依赖项目的B配置,分三种写法的差异如下:

  • 写法1:无显式配置,直接写lazy val api = project.dependsOn(domain)
    这是sbt的默认依赖逻辑,等价于隐式声明了compile->compile规则:

    • api项目主源码(src/main目录下)可正常引用domain项目主源码的所有类、方法
    • api项目测试代码(src/test目录下)仅可引用domain项目主源码的内容,无法调用domain测试目录下定义的公共测试工具、测试用例、测试数据生成方法等代码
  • 写法2:仅配置compile->compile:lazy val api = project.dependsOn(domain % "compile->compile")
    与写法1效果完全一致,属于将默认隐式规则显式声明的写法,无额外作用。一般仅当需要搭配其他配置映射规则时,才会主动显式写出该配置。

  • 写法3:仅配置test->test:lazy val api = project.dependsOn(domain % "test->test")
    仅声明测试配置的依赖关系:

    • api项目主源码完全无法引用domain项目的任何代码,编译api主源码时会直接报找不到domain相关类的错误
    • 只有api项目的测试代码可以正常引用domain项目测试目录下的代码,同时sbt会隐式将domain主源码内容暴露给api的测试配置使用,因此api测试代码中也可正常调用domain主源码的内容

常用的compile->compile;test->test就是同时声明两种依赖关系,既满足主源码的依赖需求,又可以实现跨项目的测试代码复用,避免通用测试逻辑重复开发。

内容的提问来源于stack exchange,提问作者M.G.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 22:06:03