我希望为AWS Lambda创建jars来运行作业任务。目前我的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
模块组装到我的应用程序接口的jar中,这很好用。但是,模块job
将有多个Main
类(一个pr。作业),并且当我运行sbt assembly job
时,service
模块也会被组装(即使它并不依赖)。
如何将我的设置配置为仅在需要时组装job
模块,并将单个mainClasses指定为单独组装的jars?
发布于 2018-01-16 14:45:14
在job
中设置mainClass in assembly
以定义要使用的主类,并运行job/assembly
以仅组装作业组装jar。
发布于 2018-01-16 17:05:30
您需要在生成时通过显式设置该属性来重写默认的主类。
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)
https://stackoverflow.com/questions/48283666
复制