SBT 依赖项中的“容器”和“提供”有什么区别?

Sum*_*uma 7 scala sbt xsbt-web-plugin

在阅读build.sbt许多 Web 应用程序时,经常可以看到标记为 的依赖项"provided",例如参见sbt-assembly 文档

“org.apache.spark”%%“spark-core”%“0.8.0-incubating”%“提供”

我在 SBT 文档中找不到任何提及,但是Maven 文档说明了以下内容:

  • 假如

这很像编译,但表明您希望 JDK 或容器在运行时提供依赖项

然而,有时我也看到"container"了同样的位置,比如在这个 build.sbt 中。这是同一件事吗?

val tomcatVersion = "7.0.53"

libraryDependencies ++= Seq(
  "org.apache.tomcat.embed" % "tomcat-embed-core"         % tomcatVersion % "container",
  "org.apache.tomcat.embed" % "tomcat-embed-logging-juli" % tomcatVersion % "container",
  "org.apache.tomcat.embed" % "tomcat-embed-jasper"       % tomcatVersion % "container",
  "org.apache.tomcat" % "tomcat-catalina" % tomcatVersion % "provided",
  "org.apache.tomcat" % "tomcat-coyote"   % tomcatVersion % "provided"
)
Run Code Online (Sandbox Code Playgroud)

Ric*_*tze 4

依赖项的第四个元素将依赖项与配置相关联;建立配置依赖关系。它源自ivysbt在内部使用。

“容器”配置是在 xsbt-web-plugin0.9版本中定义的,它被引入到您在这里引用的项目中。它被用来建立容器/托管运行时sbt container:start

顺便说一句 - 该运行时必须提供与“提供的”配置相对应的运行时库,这些库在编译阶段使用,但不包含在生成工件的传递依赖项中。