This page describes how to modify the default source, resource, and library directories and what files get included from them.
The directory that contains the main Scala sources is by default
src/main/scala
. For test Scala sources, it is src/test/scala
. To
change this, modify scalaSource
in the Compile
(for main sources) or
Test
(for test sources). For example,
Compile / scalaSource := baseDirectory.value / "src"
Test / scalaSource := baseDirectory.value / "test-src"
Note: The Scala source directory can be the same as the Java source directory.
The directory that contains the main Java sources is by default
src/main/java
. For test Java sources, it is src/test/java
. To change
this, modify javaSource
in the Compile
(for main sources) or Test
(for test sources).
For example,
Compile / javaSource := baseDirectory.value / "src"
Test / javaSource := baseDirectory.value / "test-src"
Note: The Scala source directory can be the same as the Java source directory.
The directory that contains the main resources is by default
src/main/resources
. For test resources, it is src/test/resources
. To
change this, modify resourceDirectory
in either the Compile
or
Test
configuration.
For example,
Compile / resourceDirectory := baseDirectory.value / "resources"
Test / resourceDirectory := baseDirectory.value / "test-resources"
The directory that contains the unmanaged libraries is by default
lib/
. To change this, modify unmanagedBase
. This setting can be
changed at the project level or in the Compile
, Runtime
, or Test
configurations.
When defined without a configuration, the directory is the default
directory for all configurations. For example, the following declares
jars/
as containing libraries:
unmanagedBase := baseDirectory.value / "jars"
When set for Compile
, Runtime
, or Test
, unmanagedBase
is the
directory containing libraries for that configuration, overriding the
default. For example, the following declares lib/main/
to contain jars
only for Compile
and not for running or testing:
Compile / unmanagedBase := baseDirectory.value / "lib" / "main"
By default, sbt includes .scala
files from the project’s base
directory as main source files. To disable this, configure
sourcesInBase
:
sourcesInBase := false
sbt collects sources
from unmanagedSourceDirectories
, which by
default consists of scalaSource
and javaSource
. Add a directory to
unmanagedSourceDirectories
in the appropriate configuration to add a
source directory. For example, to add extra-src
to be an additional
directory containing main sources,
Compile / unmanagedSourceDirectories += baseDirectory.value / "extra-src"
Note: This directory should only contain unmanaged sources, which are sources that are manually created and managed. See [Generating Files][Howto-Generating-Files] for working with automatically generated sources.
sbt collects resources
from unmanagedResourceDirectories
, which by
default consists of resourceDirectory
. Add a directory to
unmanagedResourceDirectories
in the appropriate configuration to add
another resource directory. For example, to add extra-resources
to be
an additional directory containing main resources,
Compile / unmanagedResourceDirectories += baseDirectory.value / "extra-resources"
Note: This directory should only contain unmanaged resources, which are resources that are manually created and managed. See [Generating Files][Howto-Generating-Files] for working with automatically generated resources.
When sbt traverses unmanagedSourceDirectories
for sources, it only
includes directories and files that match includeFilter
and do not
match excludeFilter
. includeFilter
and excludeFilter
have type
java.io.FileFilter
and sbt
provides some useful combinators for constructing a
FileFilter
. For example, in addition to the default hidden files
exclusion, the following also ignores files containing impl
in their
name,
unmanagedSources / excludeFilter := HiddenFileFilter || "*impl*"
To have different filters for main and test libraries, configure
Compile
and Test
separately:
Compile / unmanagedSources / includeFilter := "*.scala" || "*.java"
Test / unmanagedSources / includeFilter := HiddenFileFilter || "*impl*"
Note: By default, sbt includes
.scala
and.java
sources, excluding hidden files.
When sbt traverses unmanagedResourceDirectories
for resources, it only
includes directories and files that match includeFilter
and do not
match excludeFilter
. includeFilter
and excludeFilter
have type
java.io.FileFilter
and sbt
provides some useful combinators for constructing a
FileFilter
. For example, in addition to the default hidden files
exclusion, the following also ignores files containing impl
in their
name,
unmanagedResources / excludeFilter := HiddenFileFilter || "*impl*"
To have different filters for main and test libraries, configure
Compile
and Test
separately:
Compile / unmanagedResources / includeFilter := "*.txt"
Test / unmanagedResources / includeFilter := "*.html"
Note: By default, sbt includes all files that are not hidden.
When sbt traverses unmanagedBase
for resources, it only includes
directories and files that match includeFilter
and do not match
excludeFilter
. includeFilter
and excludeFilter
have type
java.io.FileFilter
and sbt
provides some useful combinators for constructing a
FileFilter
. For example, in addition to the default hidden files
exclusion, the following also ignores zips,
unmanagedJars / excludeFilter := HiddenFileFilter || "*.zip"
To have different filters for main and test libraries, configure
Compile
and Test
separately:
Compile / unmanagedJars / includeFilter := "*.jar"
Test / unmanagedJars / includeFilter := "*.jar" || "*.zip"
Note: By default, sbt includes jars, zips, and native dynamic libraries, excluding hidden files.