Sbt中如何为common子项目指定util兄弟项目依赖以实现独立编译
配置sbt子项目依赖并实现独立编译
嘿,我来帮你搞定这个问题!要让common子项目依赖兄弟项目util并能独立编译,分几步就能轻松实现,咱们一步步来:
1. 先在根项目中统一声明所有子项目
首先你的项目结构建议调整成这样(如果不是的话,照着改更便于sbt识别):
your-main-project/ ├── build.sbt # 根项目配置文件 ├── util/ # util子项目目录 │ └── src/ └── common/ # common子项目目录 └── src/
在根目录的build.sbt里,用sbt的项目定义语法把util和common都声明为子项目,这样sbt才能识别它们之间的兄弟关系:
lazy val root = (project in file(".")) .aggregate(util, common) // 聚合子项目,方便根项目一次性编译所有模块 .settings( // 这里放所有子项目共享的配置,比如Scala版本 scalaVersion := "2.13.12", name := "your-main-project" ) // 声明util子项目 lazy val util = project in file("util") // 声明common子项目 lazy val common = project in file("common")
2. 在common的build.sbt中添加对util的依赖
进入common子项目目录,创建或修改它的build.sbt,用sbt的dependsOn方法直接引用兄弟项目util:
// 推荐和根项目保持一致的Scala版本,也可以继承根项目配置 scalaVersion := "2.13.12" // 核心配置:让common项目依赖util子项目 lazy val common = (project in file(".")) .dependsOn(util)
这样配置后,common就能自动识别并使用util里的所有代码了。
3. 独立编译common项目的两种方式
现在你可以用两种方式单独编译common:
- 在根项目目录下运行命令:
sbt common/compile,这条指令会只编译common及其依赖的util模块 - 直接进入common子项目目录,运行
sbt compile,sbt会自动关联根项目的配置和依赖关系,同样能正常完成编译
额外小提示
- 确保
util项目本身能正常编译,否则common编译时会因为依赖缺失报错 - 如果想让
common的测试代码使用util的测试代码,可以把依赖写成.dependsOn(util % "test->test") - 子项目各自的第三方库依赖,依然可以在各自的
build.sbt里用libraryDependencies添加,和子项目依赖互不冲突
内容的提问来源于stack exchange,提问作者Azad Bolour
相关产品推荐
相关产品推荐

