如何使用SBT仅为一个作业构建

时间:2016-01-26 21:50:13

标签: scala build apache-spark sbt-assembly

我正在尝试构建单个spark scala作业。 据我所知,它应该在spark目录中使用<sbt assembly>命令完成,但是使用此方法将构建那里存在的所有作业。 有没有办法一次构建一个特定的文件?

1 个答案:

答案 0 :(得分:0)

您需要将项目拆分为多个SBT子项目(您可能已经这样做了)。然后,您可以使用SBT multi-project build

如果您这样做,您可以navigate到任何子项目并单独构建它。请注意,只有在每个子项目构建时才能构建单独的JAR,而不是在聚合根项目中构建。如果要以非交互方式构建,可以将相同的命令传递给SBT,就像在SBT shell中键入一样:

sbt "project client" "package"

package命令替换为您使用的任何其他打包命令,例如assemblyone-jar等。

对于示例项目检查this。项目结构如下(SBT shell):

root > projects
[info]     client
[info]     common
[info]   * root
[info]     server

项目定义如下:

lazy val root = Project(id = "root",
                        base = file("."))
                        .aggregate(common, client, server)

lazy val client = Project(id = "client", base = file("client"))
                         settings(clientSettings: _*) dependsOn(common)

lazy val server = Project(id = "server", base = file("server"))
                         settings(serverSettings: _*) dependsOn(common)

lazy val common = Project(id = "common", base = file("common"))
                         settings(commonSettings: _*)

正如您所看到的,有一个root项目聚合了其他3个项目。要构建clientserver,您必须先构建common。但是,client可以与server分开构建,反之亦然。要构建您构建的所有内容root