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

时间:2016-11-12 15:35:50

标签: scala sbt xsbt-web-plugin

在阅读许多网络应用程序的build.sbt时,人们通常可以看到标记为"provided"的依赖关系,例如, sbt-assembly documentation

  

“org.apache.spark”%%“spark-core”%“0.8.0-孵化”%“提供了”

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

  
      
  • 提供
  •   
     

这很像compile,但表示您希望JDK或容器在运行时提供依赖性

但有时我也会在同一位置看到"container",例如this 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"
)

1 个答案:

答案 0 :(得分:3)

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

"容器"配置由。定义 xsbt-web-plugin version 0.9,会引入您引用的项目here。 它用于为sbt container:start建立容器/托管运行时。

顺便说一下 - 运行时必然会提供与"提供的"相对应的运行时库。配置,它们在编译阶段使用,但未包含在生成的工件的传递依赖项中。