Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Add dev config key to exclude specific files from triggering a reload
  • Loading branch information
mkurz committed Sep 23, 2026
commit 432be82fc2560436549a3818afabac9dd8c865c8
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ class DevServerReloader implements BuildLink, Closeable {
Map<String, String> devSettings,
Supplier<Boolean> triggerReload,
List<File> monitoredFiles,
List<File> monitoredFilesExcludes,
FileWatchService fileWatchService,
Map<String, ? extends GeneratedSourceMapping> generatedSourceHandlers,
Object reloadLock) {
Expand All @@ -88,7 +89,17 @@ class DevServerReloader implements BuildLink, Closeable {
this.triggerReload = triggerReload;
if (!monitoredFiles.isEmpty() && fileWatchService != null) {
// Create the watcher, updates the changed boolean when a file has changed:
this.watcher = fileWatchService.watch(monitoredFiles, () -> changed = true);
this.watcher =
fileWatchService.watch(
monitoredFiles,
maybePath ->
maybePath.ifPresentOrElse(
path -> {
if (!monitoredFilesExcludes.contains(path.toFile())) {
changed = true;
}
},
() -> changed = true));
} else {
this.watcher = null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ private DevServer run(
Function<ClassLoader, ClassLoader> assetsClassLoader,
Supplier<Boolean> triggerReload,
List<File> monitoredFiles,
List<File> monitoredFilesExcludes,
FileWatchService fileWatchService,
Map<String, ? extends GeneratedSourceMapping> generatedSourceHandlers,
int defaultHttpPort,
Expand Down Expand Up @@ -155,6 +156,7 @@ private DevServer run(
devSettings,
triggerReload,
monitoredFiles,
monitoredFilesExcludes,
fileWatchService,
generatedSourceHandlers,
reloadLock);
Expand Down Expand Up @@ -236,6 +238,7 @@ public static DevServer startDevMode(
Function<ClassLoader, ClassLoader> assetsClassLoader,
Supplier<Boolean> triggerReload,
List<File> monitoredFiles,
List<File> monitoredFilesExcludes,
FileWatchService fileWatchService,
Map<String, ? extends GeneratedSourceMapping> generatedSourceHandlers,
int defaultHttpPort,
Expand All @@ -255,6 +258,7 @@ public static DevServer startDevMode(
assetsClassLoader,
triggerReload,
monitoredFiles,
monitoredFilesExcludes,
fileWatchService,
generatedSourceHandlers,
defaultHttpPort,
Expand Down
5 changes: 3 additions & 2 deletions dev-mode/sbt-plugin/src/main/scala/play/sbt/PlayImport.scala
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,9 @@ object PlayImport {
val generateAssetsJar = TaskKey[Boolean]("generateAssetsJar")
val playPackageAssets = TaskKey[FileRef]("playPackageAssets")

val playMonitoredFiles = TaskKey[Seq[File]]("playMonitoredFiles")
val fileWatchService =
val playMonitoredFiles = TaskKey[Seq[File]]("playMonitoredFiles")
val playMonitoredFilesExcludes = SettingKey[Seq[File]]("playMonitoredFilesExcludes")
val fileWatchService =
SettingKey[FileWatchService]("fileWatchService", "The watch service Play uses to watch for file changes")

val includeDocumentationInBinary =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ object PlaySettings {
playReload := uncached { PlayCommands.playReloadTask.value },
ivyLoggingLevel := UpdateLogging.DownloadOnly,
playMonitoredFiles := uncached { PlayCommands.playMonitoredFilesTask.value },
playMonitoredFilesExcludes := Seq.empty,
fileWatchService := {
FileWatchService.detect(pollInterval.value.toMillis.toInt, sLog.value)
},
Expand Down
1 change: 1 addition & 0 deletions dev-mode/sbt-plugin/src/main/scala/sbt/PlayRun.scala
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ object PlayRun {
null,
// avoid monitoring same folder twice or folders that don't exist
playMonitoredFiles.value.distinct.filter(_.exists()).asJava,
playMonitoredFilesExcludes.value.distinct.asJava,
fileWatchService.value,
generatedSourceHandlers.asJava,
playDefaultPort.value,
Expand Down