%“提供”配置
从胖 jar 中排除 jar 的第一个选项是"provided"对库依赖项使用配置。"provided"来自 Maven提供的范围,定义如下:
这很像compile,但表示您希望 JDK 或容器在运行时提供依赖项。例如,在为 Java 企业版构建 Web 应用程序时,您可以将 Servlet API 和相关 Java EE API 的依赖设置为范围provided,因为 Web 容器提供了这些类。此范围仅在编译和测试类路径上可用,并且不可传递。
由于您将代码部署到容器(在本例中为 Spark),因此与您的评论相反,您可能需要 Scala 标准库和其他库 jar(例如,如果您使用了 Dispatch)。这不会影响run或test。
包装箱
如果你只想要你的源代码,而不需要 Scala 标准库或其他库依赖项,那将被packageBin内置到 sbt 中。这个打包的 jar 可以与您可以使用 sbt-assembly 制作的仅依赖 jar 结合使用assemblyPackageDependency。
组装中的排除罐子
最后的选择是使用excludedJars in assembly:
excludedJars in assembly := {
val cp = (fullClasspath in assembly).value
cp filter {_.data.getName == "spark-core_2.9.3-0.8.0-incubating.jar"}
}