scala - 何时使用 "sbt assembly"和 "sbt compile && sbt package"?

标签 scala apache-spark sbt

我想知道什么时候应该使用sbt assembly,什么时候应该使用sbt compile && sbt package

我正在使用 Intellij IDEA 在我的本地计算机上编写一个程序,并使用 sbt compile && sbt package 对其进行编译,然后将其上传到集群并运行它使用 spark-submit。这是最好的方法吗?什么时候应该使用 sbt 汇编

最佳答案

I would like to know when should I use sbt assembly and when sbt compile && sbt package?

引用 sbt-assembly的网站(给出 sbt assembly ):

The goal is simple: Create a fat JAR of your project with all of its dependencies.

build.sbt 中的任何依赖项(未标记为 Provided )将成为称为 uber-jar 的最终 jar 文件的一部分。

您想使用该插件至少有两个原因:

  1. 将所有依赖项捆绑在一个 jar 文件中,这样更容易部署到生产环境(类似于 Docker 镜像)
  2. 使用一个 Spark 版本(例如 2.0.0)运行您的应用程序,并使用一个具有 spark-submit 的集群从 Spark 1.6.0

您使用 sbt compile && sbt package编译和打包应用程序的类(顺便说一句,它不必使用 Spark)。该 jar 文件不包含应用程序的依赖项,因此必须以其他方式提供任何依赖项(并使部署变得有点棘手)。

注意:sbt compile && sbt package只是 sbt compile package 的更长变体鉴于 compile任务是 package 的依赖项只是 sbt package .

关于scala - 何时使用 "sbt assembly"和 "sbt compile && sbt package"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53744950/

相关文章:

scala - 图 : Is it possible to execute a program on each vertex without receiving a message?

apache-spark - 如何在spark-shell中启用对spark的Hive支持(spark 2.1.1)

scala - apache Spark聚合函数使用最小值

scala - 当我在其他文件夹中构建它的精确副本时,为什么要重新编译原始 scala sbt 项目?

scala - Kleisli 列表到 Kleisli 列表

scala - 覆盖值的行为的原理

scala - Scala 是否支持类型构造函数的部分应用?

scala - Map 不能在 scala 中序列化吗?

scala - sbt任务以增加项目版本

java - 如何使用分类器访问 jar?