我想知道何时应该使用sbt assembly
,何时应该使用sbt compile && sbt package
?
我正在使用Intellij IDEA在本地计算机上编写程序,并使用sbt compile && sbt package
对其进行编译,然后将其上传到群集并使用spark-submit
运行。这是最好的方法吗?我什么时候应该使用sbt assembly
?
答案 0 :(得分:3)
我想知道何时应该使用
sbt assembly
,何时应该使用sbt compile && sbt package
?
引用sbt-assembly的网站(给出sbt assembly
的网站):
目标很简单:使用所有依赖项为项目创建一个胖JAR。
build.sbt
中的任何依赖项(未标记为Provided
)将成为最终jar文件(称为uber-jar)的一部分。
至少要使用插件有两个原因:
spark-submit
的集群,使用一个Spark版本(例如2.0.0)运行您的应用程序您使用sbt compile && sbt package
来编译和打包应用程序的类(顺便说一句,它不必使用Spark)。该jar文件不包含应用程序的依赖项,因此必须以其他方式提供任何依赖项(并使部署有些麻烦)。
注意:sbt compile && sbt package
只是sbt compile package
的一个较长的变体,假设compile
任务是package
的依赖项,则只是sbt package
。
答案 1 :(得分:1)
“ sbt程序集”非常适合要包含所有依赖项的uber jar。您将需要程序集插件才能使用“ sbt程序集”。
通常,当您不想在目标计算机上单独提供依赖的jar时,这种jar可以很好地构建。通过这种包装,您可以避免与依赖的第三方jar版本不匹配相关的问题。