【问题标题】:How to force adding provided dependency to fat jar using sbt-assembly plugin? [duplicate]如何使用 sbt-assembly 插件强制将提供的依赖项添加到 fat jar? [复制]
【发布时间】:2019-08-08 20:02:17
【问题描述】:

我有一个 Spark 项目,我通常使用 sbt-assembly 打包。所有 spark 依赖项都标记为 provided 并且不包含在我的胖 jar 中。 我想要另一个命令来构建一个包含所有依赖项的非常胖的 jar,包括 spark。 我正在尝试以下没有运气:

lazy val standalone = project
.dependsOn(mainProj % "compile->compile;test->test;provided->compile")
.settings(
  logLevel in assembly := Level.Debug,
  assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = true, includeDependency = true)
)

注意,How to add "provided" dependencies back to run/test tasks' classpath? 的答案解释了如何将 provided 依赖项添加到运行时类路径,但是我的问题是关于如何在执行 sbt assembly 后让它们最终出现在打包的工件中。

【问题讨论】:

    标签: scala sbt sbt-assembly


    【解决方案1】:

    要构建一个真正的胖 jar 来打包包括provided 依赖项在内的所有内容,我们可以像这样重新定义fullClasspath in assembly

    assembly / fullClasspath := (Compile / fullClasspath).value
    

    如果我们像这样把它放在一个单独的命令中

    commands += Command.command("assemblyTrulyFatJar") { state =>
      """set assembly / fullClasspath := (Compile / fullClasspath).value""" :: "assembly" :: state
    }
    

    然后执行sbt assemblyTrulyFatJar 应该打包所有内容,而sbt assembly 保持其默认行为。

    【讨论】:

    • 我尝试了这个解决方案,但它只允许我在 IDE 中运行应用程序,这不是我想要的。相反,我希望能够拥有一个类似于“sbt assembly”的命令,它将打包所有内容,包括提供的 deps
    • 对问题的误解表示歉意。请参阅编辑后的答案,其中包括定义assembly / fullClasspath := (Compile / fullClasspath).value。我还将要求版主希望删除 duplicated 标记。
    猜你喜欢
    • 2016-10-01
    • 2013-07-25
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多