1. 解析器

解析器 

Maven 解析器 

Maven 仓库的解析器添加如下所示

resolvers +=
  "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots"

这是最常见的用户定义解析器类型。本页的其余部分描述了如何定义其他类型的仓库。

本地 Maven 解析器 

以下代码将解析器添加到 Maven 本地仓库

resolvers += Resolver.mavenLocal

要添加自定义位置的解析器

resolvers += MavenCache("local-maven", file("path/to/maven-repo/releases"))

预定义解析器 

提供了一些预定义的仓库,列出如下

例如,要使用 java.net 仓库,请在构建定义中使用以下设置

resolvers += JavaNet2Repository

今后,预定义的仓库将归类到 Resolver 下,以便集中管理

Resolver.sonatypeOssRepos("releases")  // Or "snapshots"

自定义解析器 

sbt 提供了对 Ivy 中提供的仓库类型(文件、URL、SSH 和 SFTP)的接口。Ivy 中仓库的一个关键功能是使用 模式 来配置仓库。

使用 sbt.Resolver 中的工厂为所需类型构造仓库定义。该工厂创建了一个 Repository 对象,可以对其进行进一步配置。下表包含指向仓库类型相关 Ivy 文档以及工厂和仓库类相关 API 文档的链接。SSH 和 SFTP 仓库的配置方式相同,只是工厂的名称不同。对于 SSH,使用 Resolver.ssh,对于 SFTP,使用 Resolver.sftp

类型 工厂 Ivy 文档 工厂 API 仓库类 API
文件系统 Resolver.file Ivy 文件系统 文件系统工厂 FileRepository API
SFTP Resolver.sftp Ivy sftp sftp 工厂 SftpRepository API
SSH Resolver.ssh Ivy ssh ssh 工厂 SshRepository API
URL Resolver.url Ivy url url 工厂 URLRepository API

基本示例 

这些是使用默认 Maven 风格仓库布局的基本示例。

文件系统 

在当前工作目录的 test 目录中定义一个文件系统仓库,并声明发布到该仓库必须是原子的。

resolvers += Resolver.file("my-test-repo", file("test")) transactional()
URL 

"https://example.org/repo-releases/" 中定义一个 URL 仓库。

resolvers += Resolver.url("my-test-repo", url("https://example.org/repo-releases/"))

要指定一个 Ivy 仓库,请使用

resolvers += Resolver.url("my-test-repo", url)(Resolver.ivyStylePatterns)

或自定义下面“自定义布局”部分中描述的布局模式。

SFTP 和 SSH 仓库 

以下代码定义了一个由主机 "example.org" 上的 SFTP 提供服务的仓库

resolvers += Resolver.sftp("my-sftp-repo", "example.org")

要显式指定端口

resolvers += Resolver.sftp("my-sftp-repo", "example.org", 22)

要指定基本路径

resolvers += Resolver.sftp("my-sftp-repo", "example.org", "maven2/repo-releases/")

可以通过 as 方法配置由 sftpssh 返回的仓库的身份验证。

要使用密码身份验证

resolvers += Resolver.ssh("my-ssh-repo", "example.org") as("user", "password")

或者要提示输入密码

resolvers += Resolver.ssh("my-ssh-repo", "example.org") as("user")

要使用密钥身份验证

resolvers += {
  val keyFile: File = ...
  Resolver.ssh("my-ssh-repo", "example.org") as("user", keyFile, "keyFilePassword")
}

或者如果不需要密钥文件密码或要提示输入密钥文件密码

resolvers += Resolver.ssh("my-ssh-repo", "example.org") as("user", keyFile)

要指定发布到服务器时使用的权限

resolvers += Resolver.ssh("my-ssh-repo", "example.org") withPermissions("0644")

这类似于 chmod 的模式规范。

自定义布局 

这些示例使用模式指定自定义仓库布局。工厂方法接受一个 Patterns 实例,该实例定义要使用的模式。模式首先针对基本文件或 URL 进行解析。默认模式提供默认的 Maven 风格布局。提供一个不同的 Patterns 对象以使用不同的布局。例如

resolvers += Resolver.url("my-test-repo", url)( Patterns("[organisation]/[module]/[revision]/[artifact].[ext]") )

您可以指定多个模式,或者分别为元数据和工件指定模式。您还可以指定仓库是否应与 Maven 兼容(由 Ivy 定义)。有关要使用的方法,请参阅 模式 API

对于文件系统和 URL 仓库,您可以通过省略基本 URL,传递一个空的 Patterns 实例并使用 ivysartifacts 来指定绝对模式

resolvers += Resolver.url("my-test-repo") artifacts
        "https://example.org/[organisation]/[module]/[revision]/[artifact].[ext]"