如何编写多项目SBT文件?实现独立/批量构建Jar包及公共依赖
多子项目SBT构建方案(支持单独/批量打Jar包)
没问题,我来帮你实现这个多子项目的SBT构建需求!下面是完整的配置方案,既能满足单独构建某个子项目Jar包,也能一键构建所有子项目,还能统一管理公共依赖。
第一步:先理清项目结构
首先咱们得把项目目录搭好,顶层项目下每个子项目单独一个文件夹,另外别忘了SBT插件的配置:
your-root-project/ ├── project/ │ └── plugins.sbt # 存放SBT插件配置 ├── project-A/ # 子项目A │ └── src/ ├── project-B/ # 子项目B │ └── src/ ├── project-C/ # 子项目C │ └── src/ └── build.sbt # 核心构建配置
第二步:配置SBT插件(plugins.sbt)
因为要打可执行Jar包,咱们需要用到sbt-assembly插件,在project/plugins.sbt里添加:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.2.0") // 可以换成最新稳定版本
第三步:编写build.sbt核心配置
下面的配置会帮你实现:统一公共依赖、定义子项目、自定义批量构建任务。
// 全局设置:所有子项目共享的Scala版本和公共依赖 ThisBuild / scalaVersion := "2.13.12" // 换成你实际需要的Scala版本 ThisBuild / libraryDependencies ++= Seq( "com.typesafe.scala-logging" %% "scala-logging" % "3.9.5" // 公共依赖,所有子项目自动继承 ) // 定义子项目A lazy val projectA = (project in file("project-A")) .settings( name := "project-A", version := "1.0.0", // 子项目版本号,按需修改 // 子项目A专属依赖(如果有的话) // libraryDependencies += "xxx" %% "xxx" % "x.x.x" ) // 定义子项目B lazy val projectB = (project in file("project-B")) .settings( name := "project-B", version := "1.0.0" // 同理,可添加子项目B专属依赖 ) // 定义子项目C lazy val projectC = (project in file("project-C")) .settings( name := "project-C", version := "1.0.0" // 同理,可添加子项目C专属依赖 ) // 自定义批量构建任务:一键构建所有子项目的Jar包 lazy val assemblyAll = taskKey[Unit]("Build assembly JARs for all subprojects") assemblyAll := { (projectA / assembly).value (projectB / assembly).value (projectC / assembly).value println("✅ All subproject assembly JARs have been built successfully!") }
第四步:使用方法
现在你就可以用命令行执行构建了:
单独构建某个子项目:比如构建project-A的Jar包,直接执行
sbt project-A/assembly对应的Jar包会生成在
project-A/target/scala-<你的版本>/project-A-assembly-1.0.0.jar(版本号可在子项目settings里修改)一键构建所有子项目:执行咱们自定义的任务
sbt assemblyAll执行后三个子项目的Jar包都会各自生成在对应的target目录下。
额外说明
- 如果子项目之间有依赖关系(比如project-A依赖project-B),可以在子项目定义里用
.dependsOn(projectB)来配置,SBT会自动处理构建顺序。 - 你可以给每个子项目单独配置assembly的自定义规则(比如排除重复依赖、指定主类),只需要在对应子项目的settings里添加配置,比如:
assembly / mainClass := Some("com.yourpackage.MainA") // 指定project-A的主类
内容的提问来源于stack exchange,提问作者Dogil
相关产品推荐
相关产品推荐

