1. 自定义路径

自定义路径 

本页介绍如何修改默认源文件、资源文件和库目录以及从这些目录中包含哪些文件。

更改默认 Scala 源文件目录 

默认情况下,包含主 Scala 源文件的目录为 src/main/scala。对于测试 Scala 源文件,为 src/test/scala。要更改此设置,请修改 Compile(对于主源文件)或 Test(对于测试源文件)中的 scalaSource。例如,

Compile / scalaSource := baseDirectory.value / "src"

Test / scalaSource := baseDirectory.value / "test-src"

注意:Scala 源文件目录可以与 Java 源文件目录相同。

更改默认 Java 源文件目录 

默认情况下,包含主 Java 源文件的目录为 src/main/java。对于测试 Java 源文件,为 src/test/java。要更改此设置,请修改 Compile(对于主源文件)或 Test(对于测试源文件)中的 javaSource

例如,

Compile / javaSource := baseDirectory.value / "src"

Test / javaSource := baseDirectory.value / "test-src"

注意:Scala 源文件目录可以与 Java 源文件目录相同。

更改默认资源目录 

默认情况下,包含主资源文件的目录为 src/main/resources。对于测试资源文件,为 src/test/resources。要更改此设置,请修改 CompileTest 配置中的 resourceDirectory

例如,

Compile / resourceDirectory := baseDirectory.value / "resources"

Test / resourceDirectory := baseDirectory.value / "test-resources"

更改默认(非托管)库目录 

默认情况下,包含非托管库的目录为 lib/。要更改此设置,请修改 unmanagedBase。此设置可以在项目级别或 CompileRuntimeTest 配置中更改。

在没有配置的情况下定义时,该目录是所有配置的默认目录。例如,以下声明 jars/ 包含库

unmanagedBase := baseDirectory.value / "jars"

CompileRuntimeTest 设置时,unmanagedBase 是包含该配置库的目录,覆盖默认值。例如,以下声明 lib/main/ 仅包含 Compile 的 jar 文件,而不包含运行或测试的 jar 文件

Compile / unmanagedBase := baseDirectory.value / "lib" / "main"

禁用将项目的基目录用作源文件目录 

默认情况下,sbt 将项目的基目录中的 .scala 文件作为主源文件包含。要禁用此功能,请配置 sourcesInBase

sourcesInBase := false

添加其他源文件目录 

sbt 从 unmanagedSourceDirectories 收集 sources,该目录默认包含 scalaSourcejavaSource。在相应的配置中将目录添加到 unmanagedSourceDirectories 以添加源文件目录。例如,要添加 extra-src 作为包含主源文件的其他目录,

Compile / unmanagedSourceDirectories += baseDirectory.value / "extra-src"

注意:此目录应仅包含非托管源文件,即手动创建和管理的源文件。有关使用自动生成的源文件,请参阅 [生成文件][Howto-Generating-Files]。

添加其他资源目录 

sbt 从 unmanagedResourceDirectories 收集 resources,该目录默认包含 resourceDirectory。在相应的配置中将目录添加到 unmanagedResourceDirectories 以添加其他资源目录。例如,要添加 extra-resources 作为包含主资源文件的其他目录,

Compile / unmanagedResourceDirectories += baseDirectory.value / "extra-resources"

注意:此目录应仅包含非托管资源,即手动创建和管理的资源。有关使用自动生成的资源,请参阅 [生成文件][Howto-Generating-Files]。

在源文件目录中包含/排除文件 

当 sbt 遍历 unmanagedSourceDirectories 以查找源文件时,它只包含与 includeFilter 匹配且与 excludeFilter 不匹配的目录和文件。includeFilterexcludeFilter 的类型为 java.io.FileFilter,sbt 提供一些有用的组合器 来构建 FileFilter。例如,除了默认的隐藏文件排除外,以下还忽略名称中包含 impl 的文件,

unmanagedSources / excludeFilter := HiddenFileFilter || "*impl*"

要为主库和测试库设置不同的过滤器,请分别配置 CompileTest

Compile / unmanagedSources / includeFilter := "*.scala" || "*.java"
Test / unmanagedSources / includeFilter := HiddenFileFilter || "*impl*"

注意:默认情况下,sbt 包含 .scala.java 源文件,排除隐藏文件。

在资源目录中包含/排除文件 

当 sbt 遍历 unmanagedResourceDirectories 以查找资源时,它只包含与 includeFilter 匹配且与 excludeFilter 不匹配的目录和文件。includeFilterexcludeFilter 的类型为 java.io.FileFilter,sbt 提供一些有用的组合器 来构建 FileFilter。例如,除了默认的隐藏文件排除外,以下还忽略名称中包含 impl 的文件,

unmanagedResources / excludeFilter := HiddenFileFilter || "*impl*"

要为主库和测试库设置不同的过滤器,请分别配置 CompileTest

Compile / unmanagedResources / includeFilter := "*.txt"
Test / unmanagedResources / includeFilter := "*.html"

注意:默认情况下,sbt 包含所有未隐藏的文件。

只包含特定(非托管)库 

当 sbt 遍历 unmanagedBase 以查找资源时,它只包含与 includeFilter 匹配且与 excludeFilter 不匹配的目录和文件。includeFilterexcludeFilter 的类型为 java.io.FileFilter,sbt 提供一些有用的组合器 来构建 FileFilter。例如,除了默认的隐藏文件排除外,以下还忽略 zip 文件,

unmanagedJars / excludeFilter := HiddenFileFilter || "*.zip"

要为主库和测试库设置不同的过滤器,请分别配置 CompileTest

Compile / unmanagedJars / includeFilter := "*.jar"
Test / unmanagedJars / includeFilter := "*.jar" || "*.zip"

注意:默认情况下,sbt 包含 jar 文件、zip 文件和本机动态库,排除隐藏文件。