【问题标题】:sbt assembly package dependencies in multiple artifacts多个工件中的 sbt 程序集包依赖项
【发布时间】:2015-10-04 10:55:38
【问题描述】:

我正在尝试使用 sbt 程序集从单个项目中生成几个 jar。每个都包含一些依赖项。

到目前为止,我发现只有 this QA 与我正在寻找的内容接近。但是我不需要单独的配置,基本上当我运行程序集时,我只想生成所有不同的 jar。

更具体一点。我要生成:

  • 一个 jar 包含我的代码和一些常规依赖项
  • 一个带有 hadoop 依赖项的 jar
  • 一个装有 scala 的罐子

【问题讨论】:

    标签: scala sbt sbt-assembly


    【解决方案1】:

    无需深入了解复杂的 sbt 配置,您可以尝试另一种方法。 hadoop 依赖项是标准的,您可以在构建中将它们标记为provided 以排除它们。

    "org.apache.hadoop" % "hadoop-client" % "2.6.0" % "provided"
    

    对于 Scala,库 jar 也是标准的,可以由您的“用户”单独下载。要将其从 fat jar 中移除,请使用以下设置(程序集 0.13.0):

    assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)
    

    然后你的 fat jar 的用户被要求在类路径中提供 Scala 和 Hadoop 库。

    例如,当使用 Spark 时,这是正确的方法,因为这两个库都是由 Spark 运行环境提供的。同样的逻辑也适用于 Hadoop MapReduce 环境。

    【讨论】:

    • 是的,实际上这就是我正在做的事情(依靠 EMR 提供 hadoop 和 spark)。但是有一种新情况,我想从网关运行一些代码。我首先更愿意尝试提供应用程序打包所需的一切,如果它不起作用,则与 EMR 一样。
    猜你喜欢
    • 2015-04-28
    • 2013-08-07
    • 1970-01-01
    • 2011-12-12
    • 2015-03-05
    • 1970-01-01
    • 2011-07-14
    • 2017-04-08
    • 2012-03-04
    相关资源
    最近更新 更多