【问题标题】:SBT assembly : Can you create an assembly jar of just one sub project in Multi project build?SBT 程序集:您可以在多项目构建中创建一个仅包含一个子项目的程序集 jar 吗?
【发布时间】:2022-03-10 19:39:17
【问题描述】:

我想为一个子项目创建一个胖组装 jar,而不必为其他项目或整个全局项目生成 jar。我该怎么做?

https://github.com/sbt/sbt-assembly 我看到我可以为每个子项目添加主类或罐子的名称,但无法运行它。程序集为主项目而不是子项目运行。

有一个类似的问题,但那里的答案并没有解决这个问题。

更多详情如下:

我有一个用于多项目构建的标准文件夹结构。

├── project
│   └── build.properties
│   └── plugins.sbt
├── build.sbt
├── bar
│   └── src
├── fizz
│   └── src
└── foo
    └── src

我的 plugins.sbt 是:addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6")

我的 build.sbt 是

ThisBuild / name := "My main Project"

ThisBuild / version := "0.1"
ThisBuild / scalaVersion := "2.11.8"

//Modules/Projects
lazy val global = project
  .in(file("."))
  .settings(settings)
  .disablePlugins(AssemblyPlugin)
  .aggregate(
    bar,
    fizz,
    foo
  )

lazy val bar = project
  .settings(
    name := "Bar",
    settings,
    assemblySettings
  )

lazy val fizz = project
  .settings(
    name := "Fizz",
    settings,
    assemblySettings
  )

lazy val foo = project
  .settings(
    name := "Foo",
    settings,
    assemblySettings
  )
  .dependsOn(
    fizz
  )

lazy val compilerOptions = Seq(
  "-encoding",
  "utf8"
)

lazy val settings = Seq(
  scalacOptions ++= compilerOptions
)

lazy val assemblySettings = Seq(
  assemblyMergeStrategy in assembly := {
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard
    case x =>
      val oldStrategy = (assemblyMergeStrategy in assembly).value
      oldStrategy(x)
  }
)

如果我运行assembly,它会在 Intellij 的 sbt shell 中运行全局项目的程序集。现在因为我已将 aggregate 添加到全局项目中,它还会为所有子项目生成单独的 jar。

但这需要很多时间,我只想生成一个 bar 的 Jar,它只会给我 Bar 的胖 jar。如果我只是在 Foo 上运行程序集,它将为 Foo 创建一个胖 jar,包括 Fizz 但不包括 Bar。如何做到这一点?

【问题讨论】:

  • sbt shell 中尝试bar/assembly
  • @LuisMiguelMejíaSuárez 谢谢这个工作。不知道为什么我要尝试sbt bar/assembly
  • 你试过sbt bar/assembly吗?前缀bar 使任务在给定的子项目中运行,在本例中为子项目bar

标签: scala intellij-idea sbt sbt-assembly sbt-idea


【解决方案1】:

根据@LuisMiguelMejíaSuárez 的评论,解决方案有效。

bar/assembly

所以<sum-module-name-as-in-build.sbt>/assembly

【讨论】:

    猜你喜欢
    • 2020-03-29
    • 2013-03-12
    • 2014-08-26
    • 2019-08-02
    • 2014-08-08
    • 2010-10-23
    • 1970-01-01
    • 2013-02-04
    • 2021-11-16
    相关资源
    最近更新 更多