什么时候使用“ sbt汇编”和“ sbt编译&& sbt软件包”?

die*_*ens 2 scala sbt apache-spark

我想知道我什么时候应该使用sbt assembly以及何时sbt compile && sbt package?

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

Jac*_*ski 5

我想知道我什么时候应该使用sbt assembly以及何时sbt compile && sbt package?

引用sbt-assembly的网站(提供sbt assembly):

目标很简单:使用所有依赖项为项目创建一个胖JAR。

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

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

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

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

注意:鉴于任务是is的依赖项,它只是其中的sbt compile && sbt package一个较长变体。sbt compile packagecompilepackagesbt package

  • “将所有依赖项捆绑在一个 jar 文件中,这样更容易部署到生产环境(类似于 Docker 映像)”您可能不想将 fat jar 放入 docker 映像中,因为 Docker 的优势在于能够存储之间的增量图像的版本。通过做fat jar,即使你改变了一行代码,docker也会认为他们的整个jar已经改变了。如果您将其保留为 Docker 的分解形式,它将仅看到代码更改的 jar 已更改。 (2认同)