我正在尝试构建一个分为多个项目的顶级项目。 各个项目没有关系,我想要的构建输出是构建每个项目的jar文件。
使用sbt命令可以构建多种方法,但我想要的只是一个环境,我可以单独构建每个项目,或者一次构建所有项目。
例如,有三个独立的项目,我可以使用以下虚拟命令。
ForegroundElement_Loaded
如果你能写出build.sbt的基础知识,我将不胜感激。
此外,每个项目都可以依赖于公共库。 (例如,scala-logging等库)
谢谢。
答案 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文件在子模块根目录中。)