如何在多个项目中编写sbt文件?

时间:2018-01-31 11:14:49

标签: scala intellij-idea sbt

我正在尝试构建一个分为多个项目的顶级项目。 各个项目没有关系,我想要的构建输出是构建每个项目的jar文件。

使用sbt命令可以构建多种方法,但我想要的只是一个环境,我可以单独构建每个项目,或者一次构建所有项目。

例如,有三个独立的项目,我可以使用以下虚拟命令。

ForegroundElement_Loaded

如果你能写出build.sbt的基础知识,我将不胜感激。

此外,每个项目都可以依赖于公共库。 (例如,scala-logging等库)

谢谢。

1 个答案:

答案 0 :(得分:3)

基本上,您创建build.sbt并声明所有这些项目:

lazy val root = (project in file("."))
   // task dependency e.g.:
   // root/assembly triggers projectA/assembly and projectB/assembly and projectC/assembly
   // root/test triggers projectA/test and projectB/test and projectC/test
   // etc
  .aggregate(projectA, projectB, projectC)

lazy val projectA = project in file("project-a")

lazy val projectB = project in file("project-b")

lazy val projectC = project in file("project-c")

然后,一旦你将sbt-assembly添加到你的plugins.sbt,你就可以运行sbt assembly,它将组装所有这3个项目,并将结果放在每个项目中{{1} }。当然,例如target/scala-[version]/[sth].jar只汇编projectA等。

对于常见设置,您可以将它们存储在变量中,例如:

sbt projectA/assembly

然后应用它:

val commonSettings = Seq(
  organization := "my-organization",
  version := "1.2.3-SNAPSHOT",
  libraryDependencies += "organization" %% "library" % "version"
)

需要一些时间来掌握它,但sbt允许在许多地方使用普通的Scala。在引擎lazy val projectA = (project in file("project-a")) // some project-specific settings .settings( name := "project-a-module", description := "a module of sth sth project" ) // here we take the Seq and use it like vararg .settings(commonSettings: _*) 文件下只添加一些导入(例如每个插件.sbt对象的内容)并将“rouge”设置附加到(不在任何autoImport子句中)到当前项目(所以root .sbt文件在根目录中的项目,子模块是否.sbt文件在子模块根目录中。)