启动器可以通过以下几种方式进行配置,按优先级递增排列
/sbt/sbt.boot.properties
文件sbt.boot.properties
的配置文件。将它放在类路径的根目录中,没有 /sbt 前缀。@
为前缀的启动器的第一个参数来实现。系统属性的优先级较低。对相对路径的解析首先尝试针对当前工作目录,然后针对用户的 home 目录,最后针对包含启动器 jar 的目录进行解析。如果所有这些尝试都失败,则会生成错误。
sbt 作为应用程序的默认配置文件如下所示
[scala]
version: ${sbt.scala.version-auto}
[app]
org: ${sbt.organization-org.scala-sbt}
name: sbt
version: ${sbt.version-read(sbt.version)[0.13.5]}
class: ${sbt.main.class-sbt.xMain}
components: xsbti,extra
cross-versioned: ${sbt.cross.versioned-false}
[repositories]
local
typesafe-ivy-releases: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
maven-central
sonatype-snapshots: https://oss.sonatype.org/content/repositories/snapshots
[boot]
directory: ${sbt.boot.directory-${sbt.global.base-${user.home}/.sbt}/boot/}
[ivy]
ivy-home: ${sbt.ivy.home-${user.home}/.ivy2/}
checksums: ${sbt.checksums-sha1,md5}
override-build-repos: ${sbt.override.build.repos-false}
repository-config: ${sbt.repository.config-${sbt.global.base-${user.home}/.sbt}/repositories}
让我们详细了解所有启动器配置部分
[scala]
部分用于配置 Scala 的版本。它包含一个属性
version
- 应用程序使用的 Scala 版本,如果应用程序不是跨版本,则为 auto
。classifiers
- 要解析的额外 Scala 工件(可选)的列表,例如源代码。[app]
部分配置启动器将如何使用 Ivy 依赖项管理器查找您的应用程序。它包含以下属性
org
- 与 Ivy 模块关联的组织。(Maven 术语中的 groupId
)name
- Ivy 模块的名称。(Maven 术语中的 artifactId
)version
- Ivy 模块的版本。class
- 应用程序的“入口点”的名称。入口点必须是满足以下条件之一的类
xsbti.AppMain
接口。xsbti.ServerMain
接口。static void main(String[])
的方法static int main(String[])
的方法static xsbti.Exit main(String[])
的方法components
- Ivy 应该解析的额外组件(可选)的列表。cross-versioned
- 一个可选字符串,表示此应用程序如何发布。如果 app.cross-versioned
为 binary,则解析的模块 ID 为 {app.name+'_'+CrossVersion.binaryScalaVersion(scala.version)}
。如果 app.cross-versioned
为 true
或 full
,则解析的模块 ID 为 {app.name+'_'+scala.version}
。当跨版本时,scala.version
属性必须指定且不能为 auto
。resources
- 应该添加到应用程序类路径的 jar 文件(可选)的列表。classifiers
- 应该与此应用程序一起解析的额外分类器(可选)的列表,例如源代码。[repositories]
部分配置 Ivy 将在哪里以及如何查找您的应用程序。每行表示 Ivy 将查找的仓库。
有几个内置字符串可用于常见仓库
local
- 本地 Ivy 仓库 ~/.ivy2/local
。maven-local
- 本地 Maven 仓库 ~/.m2/repository
。maven-central
- Maven Central 仓库 repo1.maven.org
。除了内置仓库之外,还可以使用以下语法配置其他仓库
name: url(, pattern)(,bootOnly)(,descriptorOptional)(,skipConsistencyCheck)(,allowInsecureProtocol)
name
属性是一个标识符,Ivy 使用它来缓存从此位置解析的模块。name
在所有仓库中都应该是唯一的。
url
属性是 Ivy 应该查找模块的基 url
。
pattern
属性是 Ivy 应该查找模块的可选方式规范。默认情况下,启动器假设仓库采用 maven 风格的格式。
bootOnly
字符串用于告诉 Ivy 仅在启动期间使用此仓库。即查找 sbt 自己的 JAR 和任何插件的 JAR。具有 bootOnly
字符串的仓库不会用于构建时依赖解析。
skipConsistencyCheck
字符串用于告诉 Ivy 不要验证它解析的文件的校验和和签名。
allowInsecureProtocol
字符串告诉 SBT 不要输出关于此仓库为 http://
的警告。在使用 HTTP 仓库之前请仔细考虑,因为它们可能会带来重大的安全风险。
[boot]
部分用于配置 sbt 启动器将在哪里存储其缓存和配置信息。它包含以下属性
directory
- 此处定义的目录用于存储启动器解析的所有缓存的 JAR。properties
- (可选)用于任何 read
变量的属性文件。[ivy]
部分用于配置 Ivy 依赖项管理器以解析应用程序。它包含以下属性
ivy-home
- Ivy 的主目录。这决定了 ivy-local 仓库的位置,以及 Ivy 缓存的存储位置。默认为 ~/.ivy2
checksums
- Ivy 应该用来验证工件是否正确解析的校验和的逗号分隔列表,例如 md5 或 sha1。override-build-repos
- 如果设置了此选项,则 xsbti.Launcher
接口上的 isOverrideRepositories
方法将返回其值。此方法的使用是特定于应用程序的,但在 sbt 的情况下,它表示启动器中仓库的配置应该覆盖任何构建使用的仓库。如果可以,应用程序应该尊重此约定。repository-config
- 这指定了一个配置位置,Ivy 仓库也可以在那里进行配置。如果此文件存在,则其内容将覆盖 [repositories]
部分。当使用启动器的 --locate
功能时,此部分配置服务器的启动方式。它包含以下属性
lock
- 控制对正在运行的服务器的访问的文件。此文件将包含服务器使用的活动端口,并且必须位于支持锁定的文件系统上。jvmargs
- 包含在启动服务器时使用的以换行符分隔的 JVM 参数的文件。jvmprops
- 一个属性文件的路径,它将定义服务器中的覆盖属性。此文件中定义的所有属性都将设置为 -D
Java 属性。属性值可以包含变量替换。变量替换采用以下形式之一
${variable.name}
${variable.name-default}
其中 variable.name
是系统属性的名称。如果存在该名称的系统属性,则会替换其值。如果不存在,并且指定了默认值,则在递归地替换默认值中的变量后,将替换默认值。如果系统属性不存在且未指定默认值,则不会替换原始字符串。
还有一种特殊的变量替换
read(property.name)[default]
它将在 boot.properties
配置的文件中查找值。如果未配置 boot.properties
文件或属性不存在,则选择默认值。
配置文件基于行,以 UTF-8 编码读取,并由以下语法定义。'nl'
是换行符或文件结尾,'text'
是不包含换行符或周围分隔符(如括号或方括号)的纯文本
configuration: scala app repositories boot log appProperties
scala: "[" "scala" "]" nl version nl classifiers nl
app: "[" "app" "]" nl org nl name nl version nl components nl class nl crossVersioned nl resources nl classifiers nl
repositories: "[" "repositories" "]" nl (repository nl)*
boot: "[" "boot" "]" nl directory nl bootProperties nl search nl promptCreate nl promptFill nl quickOption nl
log: "[" "log" "]" nl logLevel nl
appProperties: "[" "app-properties" "]" nl (property nl)*
ivy: "[" "ivy" "]" nl homeDirectory nl checksums nl overrideRepos nl repoConfig nl
directory: "directory" ":" path
bootProperties: "properties" ":" path
search: "search" ":" ("none" | "nearest" | "root-first" | "only" ) ("," path)*
logLevel: "level" ":" ("debug" | "info" | "warn" | "error")
promptCreate: "prompt-create" ":" label
promptFill: "prompt-fill" ":" boolean
quickOption: "quick-option" ":" boolean
version: "version" ":" versionSpecification
versionSpecification: readProperty | fixedVersion
readProperty: "read" "(" propertyName ")" "[" default "]"
fixedVersion: text
classifiers: "classifiers" ":" text ("," text)*
homeDirectory: "ivy-home" ":" path
checksums: "checksums" ":" checksum ("," checksum)*
overrideRepos: "override-build-repos" ":" boolean
repoConfig: "repository-config" ":" path
org: "org" ":" text
name: "name" ":" text
class: "class" ":" text
components: "components" ":" component ("," component)*
crossVersioned: "cross-versioned" ":" ("true" | "false" | "none" | "binary" | "full")
resources: "resources" ":" path ("," path)*
repository: ( predefinedRepository | customRepository ) nl
predefinedRepository: "local" | "maven-local" | "maven-central"
customRepository: label ":" url [ ["," ivyPattern] ["," artifactPattern] [", mavenCompatible"] [", bootOnly"]]
property: label ":" propertyDefinition ("," propertyDefinition)*
propertyDefinition: mode "=" (set | prompt)
mode: "quick" | "new" | "fill"
set: "set" "(" value ")"
prompt: "prompt" "(" label ")" ("[" default "]")?
boolean: "true" | "false"
nl: "\r\n" | "\n" | "\r"
path: text
propertyName: text
label: text
default: text
checksum: text
ivyPattern: text
artifactPattern: text
url: text
component: text