本页介绍如何修改默认源文件、资源文件和库目录以及从这些目录中包含哪些文件。
默认情况下,包含主 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 文件和本机动态库,排除隐藏文件。