§管理库依赖项
注意:此页面的一些部分是从 sbt 手册中复制的,特别是来自 库依赖项 页面。你可以参考该页面以获取此处信息的更详细和更新版本。
§非托管依赖项
大多数人最终会使用托管依赖项,这允许进行细粒度的控制,但非托管依赖项在开始时可能更简单。
非托管依赖项的工作原理如下:在项目的根目录中创建一个 lib/
目录,然后将 jar 文件添加到该目录中。它们将自动添加到应用程序类路径中。除此之外没有其他操作。
不需要在 build.sbt
中添加任何内容来使用非托管依赖项,尽管如果你想使用与 lib
不同的目录,可以更改配置键。
§托管依赖项
Play 使用 Apache Ivy(通过 sbt)来实现托管依赖项,因此如果你熟悉 Maven 或 Ivy,你已经习惯了托管依赖项。
大多数情况下,你只需在 build.sbt
文件中列出你的依赖项。
声明依赖项如下所示(定义 group
、artifact
和 revision
)
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"
假设您的构建的 scalaVersion
为 2.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-dependency-graph 更好地可视化您的依赖项树。另请参阅我们关于 调试 sbt 常用问题的页面。
下一步:使用子项目
发现此文档中的错误?此页面的源代码可以在 这里 找到。在阅读 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。