多个 main 类 与 SBT 装配
Multiple main classes with SBT assembly
我正在为 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
assemble 将 service
模块放入我的 API 的罐子中,效果很好。然而,模块 job
将有多个 Main
类 (一个 pr. 作业),当我 运行 sbt assembly job
时 service
模块也是 assembled(即使它不依赖)。
如何在需要时将我的设置配置为仅 assemble job
模块,并将各个 mainClasses 单独指定为 assembled jar?
在 job
中设置 mainClass in assembly
以定义要使用的主要 class,运行 job/assembly
仅 assemble 作业程序集罐子。
您需要在构建时通过显式设置 属性 来覆盖默认的 main class。
sbt "; set mainClass in assembly := Some("another/class"); job/assembly"
不确定这是好的做法,但您也可以为每个作业定义一个子项目,并设置正确的主要 class。
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)
我正在为 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
assemble 将 service
模块放入我的 API 的罐子中,效果很好。然而,模块 job
将有多个 Main
类 (一个 pr. 作业),当我 运行 sbt assembly job
时 service
模块也是 assembled(即使它不依赖)。
如何在需要时将我的设置配置为仅 assemble job
模块,并将各个 mainClasses 单独指定为 assembled jar?
在 job
中设置 mainClass in assembly
以定义要使用的主要 class,运行 job/assembly
仅 assemble 作业程序集罐子。
您需要在构建时通过显式设置 属性 来覆盖默认的 main class。
sbt "; set mainClass in assembly := Some("another/class"); job/assembly"
不确定这是好的做法,但您也可以为每个作业定义一个子项目,并设置正确的主要 class。
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)