From 7575c5a1be3f0c1e72d2e858bab6d45c3b5f35f0 Mon Sep 17 00:00:00 2001 From: Merlin Hughes Date: Wed, 24 Jun 2026 02:03:13 -0400 Subject: [PATCH] [2.x] Suppress multiple main classes warning when running tests (#9372) In a project with multiple main classes, the "multiple main classes detected" warning is unwanted noise when running tests. This message is already suppressed for explicit run commands, now also suppress it for test. --- main/src/main/scala/sbt/Defaults.scala | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 9a7b8b90d..f89587923 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1140,19 +1140,20 @@ object Defaults extends BuildCommon with DefExtra { selectMainClass := mainClass.value orElse askForMainClass(discoveredMainClasses.value), run / mainClass := (run / selectMainClass).value, mainClass := Def.uncached { - // Suppress warning for run commands (user is actively running, warning is noise) - def isRunCommand(s: String): Boolean = s match + // Suppress warning for run/test commands (user is actively running, warning is noise) + def isRunOrTestCommand(s: String): Boolean = s match case "run" | "runMain" | "bgRun" | "bgRunMain" | "fgRun" | "fgRunMain" => true + case "test" | "testFull" | "testOnly" | "testQuick" | "testSelected" => true case _ => false val logWarning = state.value.currentCommand.forall(!_.commandLine.split(" ").exists { - case s if isRunCommand(s) => true - case r => + case s if isRunOrTestCommand(s) => true + case r => // Handle both "/" (new syntax like Test/run) and ":" (old syntax like test:run) r.split("[/:]") match { case Array(parts*) => parts.lastOption match { - case Some(s) if isRunCommand(s) => true - case _ => false + case Some(s) if isRunOrTestCommand(s) => true + case _ => false } } })