4

我正在寻找为 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将模块组装service到我的 API 的 jar 中,并且工作正常。然而,该模块job将有多个Main类(一个公关工作),并且当我运行sbt assembly jobservice模块时,它也会被组装(即使它不依赖于它)。

如何将我的设置配置为仅job在需要时组装模块,并将各个 mainClasses 指定为单独组装的 jar?

4

2 回答 2

4

设置mainClass in assemblyjob定义要使用的主类,并运行job/assembly以组装作业组装 jar。

于 2018-01-16T14:45:14.357 回答
0

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

sbt "; set mainClass in assembly := Some("another/class"); job/assembly"

不确定这是一种好习惯,但或者您可以使用正确的主类集为每个作业定义一个子项目。

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)
于 2018-01-16T17:05:30.140 回答