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



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

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

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

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

目标很简单:创建项目的胖 JAR 及其所有依赖项。

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

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

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

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

注意:sbt compile && sbt package只是sbt compile package的较长变体,鉴于compile任务是package的依赖关系,这只是sbt package

"sbt assembly"非常适合在你想要包含所有依赖项的 uber jar 时使用。您将需要汇编插件才能使用"sbt 汇编"。

通常,当您不想在目标计算机上单独提供依赖 jar 时,最好构建这种 jar。您可以通过这种打包来避免依赖的第三方 jar 版本不匹配相关问题。

相关内容

最新更新