sbt中dependsOn的compile->compile;test->test配置作用及差异对比
sbt项目依赖
dependsOn配置映射规则说明 首先明确sbt依赖配置中A->B的核心规则:当前项目的A配置,依赖被依赖项目的B配置,分三种写法的差异如下:
写法1:无显式配置,直接写
lazy valapi= project.dependsOn(domain)
这是sbt的默认依赖逻辑,等价于隐式声明了compile->compile规则:- api项目主源码(
src/main目录下)可正常引用domain项目主源码的所有类、方法 - api项目测试代码(
src/test目录下)仅可引用domain项目主源码的内容,无法调用domain测试目录下定义的公共测试工具、测试用例、测试数据生成方法等代码
- api项目主源码(
写法2:仅配置
compile->compile:lazy valapi= project.dependsOn(domain% "compile->compile")
与写法1效果完全一致,属于将默认隐式规则显式声明的写法,无额外作用。一般仅当需要搭配其他配置映射规则时,才会主动显式写出该配置。写法3:仅配置
test->test:lazy valapi= project.dependsOn(domain% "test->test")
仅声明测试配置的依赖关系:- api项目主源码完全无法引用domain项目的任何代码,编译api主源码时会直接报找不到domain相关类的错误
- 只有api项目的测试代码可以正常引用domain项目测试目录下的代码,同时sbt会隐式将domain主源码内容暴露给api的测试配置使用,因此api测试代码中也可正常调用domain主源码的内容
常用的
compile->compile;test->test就是同时声明两种依赖关系,既满足主源码的依赖需求,又可以实现跨项目的测试代码复用,避免通用测试逻辑重复开发。
内容的提问来源于stack exchange,提问作者M.G.
相关产品推荐
相关产品推荐

