【问题标题】:Multiple main classes with SBT assembly带有 SBT 组件的多个主要类
【发布时间】:2018-06-25 07:18:24
【问题描述】:

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

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

【问题讨论】:

    标签: scala sbt sbt-assembly sbt-plugin


    【解决方案1】:

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

    【讨论】:

    • 感谢您的快速回复。这仅适用于组装作业模块我如何配置 sbt 以使用多个电源每个生成一个 jar?
    • 最简单的方法是创建多个依赖于job 的项目,然后每个项目都包含自己的主项目(无需配置),或者每个项目都配置它们的主项目——这被定义为job 项目。
    • @DaleWijnand 有没有这方面的例子?
    • @CpILL 这是我在 GitHub 上找到的一个:github.com/non/zillionaire/blob/…
    【解决方案2】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 2014-01-04
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      • 2016-01-19
      • 2016-08-27
      • 1970-01-01
      相关资源
      最近更新 更多