文档

§管理库依赖项

注意:此页面的一些部分是从 sbt 手册中复制的,特别是来自 库依赖项 页面。你可以参考该页面以获取此处信息的更详细和更新版本。

§非托管依赖项

大多数人最终会使用托管依赖项,这允许进行细粒度的控制,但非托管依赖项在开始时可能更简单。

非托管依赖项的工作原理如下:在项目的根目录中创建一个 lib/ 目录,然后将 jar 文件添加到该目录中。它们将自动添加到应用程序类路径中。除此之外没有其他操作。

不需要在 build.sbt 中添加任何内容来使用非托管依赖项,尽管如果你想使用与 lib 不同的目录,可以更改配置键。

§托管依赖项

Play 使用 Apache Ivy(通过 sbt)来实现托管依赖项,因此如果你熟悉 Maven 或 Ivy,你已经习惯了托管依赖项。

大多数情况下,你只需在 build.sbt 文件中列出你的依赖项。

声明依赖项如下所示(定义 groupartifactrevision

libraryDependencies += "org.apache.derby" % "derby" % "10.16.1.1"

或者像这样,带有可选的 configuration

libraryDependencies += "org.apache.derby" % "derby" % "10.16.1.1" % "test"

可以通过多种声明(如上所述)添加多个依赖项,或者你可以提供一个 Scala 序列

libraryDependencies ++= Seq(
  "org.apache.derby" % "derby"          % "10.16.1.1",
  "org.hibernate"    % "hibernate-core" % "6.4.4.Final"
)

当然,sbt(通过 Ivy)需要知道从哪里下载模块。如果您的模块位于 sbt 附带的默认仓库之一,那么这将直接生效。

§使用 %% 获取正确的 Scala 版本

如果您使用 groupID %% artifactID % revision 而不是 groupID % artifactID % revision(区别在于 groupID 后的双 %%),sbt 会将您的项目的 Scala 版本添加到构件名称中。这只是一个快捷方式。您可以在没有 %% 的情况下编写它。

libraryDependencies += "org.scala-stm" % "scala-stm_2.13" % "0.9.1"

假设您的构建的 scalaVersion2.13.13,以下内容是相同的(注意 "org.scala-tools" 后的双 %%)。

libraryDependencies += "org.scala-stm" %% "scala-stm" % "0.9.1"

这样做的目的是,许多依赖项针对多个 Scala 版本进行编译,您希望获取与您的项目匹配的版本以确保二进制兼容性。

§解析器

默认情况下,sbt 使用 Maven Central,并且根据您使用的 sbt 版本,可能会使用其他仓库。您可以在 sbt 中找到这些仓库 这里(选择与您的 sbt 版本相对应的标签)。

使用 resolvers 设置键添加您自己的解析器。例如

resolvers ++= Resolver.sonatypeOssRepos("snapshots")

如果您将本地 Maven 仓库添加为仓库,sbt 可以搜索您的本地 Maven 仓库。

resolvers += (
  "Local Maven Repository".at(s"file:///${Path.userHome.absolutePath}/.m2/repository")
)

§处理依赖项之间的冲突

sbt 有关于如何管理依赖项之间冲突的详细文档。

sbt:依赖项冲突管理

您还可以使用 sbt-dependency-graph 更好地可视化您的依赖项树。另请参阅我们关于 调试 sbt 常用问题的页面。

下一步:使用子项目


发现此文档中的错误?此页面的源代码可以在 这里 找到。在阅读 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。