本页介绍如何修改默认源文件、资源文件和库目录以及从这些目录中包含哪些文件。
默认情况下,包含主 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 源文件的目录为 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。要更改此设置,请修改 Compile 或 Test 配置中的 resourceDirectory。
例如,
Compile / resourceDirectory := baseDirectory.value / "resources"
Test / resourceDirectory := baseDirectory.value / "test-resources"
默认情况下,包含非托管库的目录为 lib/。要更改此设置,请修改 unmanagedBase。此设置可以在项目级别或 Compile、Runtime 或 Test 配置中更改。
在没有配置的情况下定义时,该目录是所有配置的默认目录。例如,以下声明 jars/ 包含库
unmanagedBase := baseDirectory.value / "jars"
为 Compile、Runtime 或 Test 设置时,unmanagedBase 是包含该配置库的目录,覆盖默认值。例如,以下声明 lib/main/ 仅包含 Compile 的 jar 文件,而不包含运行或测试的 jar 文件
Compile / unmanagedBase := baseDirectory.value / "lib" / "main"
默认情况下,sbt 将项目的基目录中的 .scala 文件作为主源文件包含。要禁用此功能,请配置 sourcesInBase
sourcesInBase := false
sbt 从 unmanagedSourceDirectories 收集 sources,该目录默认包含 scalaSource 和 javaSource。在相应的配置中将目录添加到 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 不匹配的目录和文件。includeFilter 和 excludeFilter 的类型为 java.io.FileFilter,sbt 提供一些有用的组合器 来构建 FileFilter。例如,除了默认的隐藏文件排除外,以下还忽略名称中包含 impl 的文件,
unmanagedSources / excludeFilter := HiddenFileFilter || "*impl*"
要为主库和测试库设置不同的过滤器,请分别配置 Compile 和 Test
Compile / unmanagedSources / includeFilter := "*.scala" || "*.java"
Test / unmanagedSources / includeFilter := HiddenFileFilter || "*impl*"
注意:默认情况下,sbt 包含
.scala和.java源文件,排除隐藏文件。
当 sbt 遍历 unmanagedResourceDirectories 以查找资源时,它只包含与 includeFilter 匹配且与 excludeFilter 不匹配的目录和文件。includeFilter 和 excludeFilter 的类型为 java.io.FileFilter,sbt 提供一些有用的组合器 来构建 FileFilter。例如,除了默认的隐藏文件排除外,以下还忽略名称中包含 impl 的文件,
unmanagedResources / excludeFilter := HiddenFileFilter || "*impl*"
要为主库和测试库设置不同的过滤器,请分别配置 Compile 和 Test
Compile / unmanagedResources / includeFilter := "*.txt"
Test / unmanagedResources / includeFilter := "*.html"
注意:默认情况下,sbt 包含所有未隐藏的文件。
当 sbt 遍历 unmanagedBase 以查找资源时,它只包含与 includeFilter 匹配且与 excludeFilter 不匹配的目录和文件。includeFilter 和 excludeFilter 的类型为 java.io.FileFilter,sbt 提供一些有用的组合器 来构建 FileFilter。例如,除了默认的隐藏文件排除外,以下还忽略 zip 文件,
unmanagedJars / excludeFilter := HiddenFileFilter || "*.zip"
要为主库和测试库设置不同的过滤器,请分别配置 Compile 和 Test
Compile / unmanagedJars / includeFilter := "*.jar"
Test / unmanagedJars / includeFilter := "*.jar" || "*.zip"
注意:默认情况下,sbt 包含 jar 文件、zip 文件和本机动态库,排除隐藏文件。