Scala 具有SBT程序集的多个主类

Scala 具有SBT程序集的多个主类,scala,sbt,sbt-assembly,sbt-plugin,Scala,Sbt,Sbt Assembly,Sbt Plugin,我希望为AWS Lambda创建JAR来运行作业任务。当前,我的build.sbt文件如下所示: lazy val commonSettings = Seq(...) lazy val core = project .settings(commonSettings: _*) lazy val job = project .settings(commonSettings: _*) .dependsOn(core) lazy val service = project

我希望为AWS Lambda创建JAR来运行作业任务。当前,我的build.sbt文件如下所示:

lazy val commonSettings = Seq(...)

lazy val core = project
    .settings(commonSettings: _*)

lazy val job = project
    .settings(commonSettings: _*)
    .dependsOn(core)

lazy val service = project
    .settings(commonSettings: _*)
    .settings(
        mainClass in assembly := Some("io.example.service.Lambda"),
        assemblyJarName in assembly := "lambda.jar"
    )
    .dependsOn(core)
运行
sbt assembly
服务
模块组装到我的API的jar中,效果很好。然而,模块
job
将有多个
Main
类(一个pr.job),当我运行
sbt组装作业
时,也会组装
服务
模块(即使不依赖于它)


如何将设置配置为仅在需要时组装
作业
模块,并将各个mainClass指定为单独组装的JAR?

作业
中设置
mainClass以定义要使用的主类,然后运行
job/assembly
来组装作业程序集jar。

您需要在构建时通过显式设置属性来重写默认的主类

sbt”在程序集中设置mainClass:=Some(“另一个/类”);作业/程序集“

不确定这是否是一个好的实践,但也可以使用正确的主类集为每个作业定义一个子项目

lazy val job1 = project
    .settings(commonSettings: _*)
    .settings(
        mainClass in assembly := Some("io.example.service.Lambda"),
        assemblyJarName in assembly := "lambda.jar"
    )
    .dependsOn(core)

lazy val job2 = project
    .settings(commonSettings: _*)
    .settings(
        mainClass in assembly := Some("io.example.service.Lambda2"),
        assemblyJarName in assembly := "lambda2.jar"
    )
    .dependsOn(core)

谢谢你的快速回复。这只适用于组装作业模块。我如何配置sbt使用多个干线,每个干线生成一个jar?最简单的方法是创建多个依赖于作业的项目,然后每个项目包含各自的干线(无需配置)或者每个人都在配置他们的主任务,这是在
作业
项目中定义的。@DaleWijnand是否存在以及在什么地方有这样的例子?@CpILL这是我在GitHub上找到的一个: