From 17f03201d3119207339db90a00003befff117e26 Mon Sep 17 00:00:00 2001 From: mkdev11 Date: Tue, 6 Jan 2026 11:00:25 +0200 Subject: [PATCH 1/2] Fix debug options breaking launcher on Windows Filter rt-ext-dir output for java9-rt-ext- pattern, matching the Unix script behavior. This prevents debug agent stdout (e.g., 'Listening for transport dt_socket at address: 1234') from being incorrectly parsed as a file path. Fixes #8100 --- launcher-package/src/universal/bin/sbt.bat | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/launcher-package/src/universal/bin/sbt.bat b/launcher-package/src/universal/bin/sbt.bat index cbc925aed..13bdbb5d3 100755 --- a/launcher-package/src/universal/bin/sbt.bat +++ b/launcher-package/src/universal/bin/sbt.bat @@ -980,7 +980,9 @@ exit /B 1 :copyrt if /I !JAVA_VERSION! GEQ 9 ( "!_JAVACMD!" !_JAVA_OPTS! !_SBT_OPTS! -jar "!sbt_jar!" --rt-ext-dir > "%TEMP%.\rtext.txt" - set /p java9_ext= < "%TEMP%.\rtext.txt" + rem Filter for the line containing java9-rt-ext- to avoid picking up debug agent output + set "java9_ext=" + for /f "tokens=*" %%a in ('findstr /c:"java9-rt-ext-" "%TEMP%.\rtext.txt"') do set "java9_ext=%%a" set "java9_rt=!java9_ext!\rt.jar" if not exist "!java9_rt!" ( From 79ab58f4af42aa4492ff77a3e9b470819b99314f Mon Sep 17 00:00:00 2001 From: mkdev11 Date: Tue, 6 Jan 2026 14:21:03 +0200 Subject: [PATCH 2/2] Add regression test for debug options in SBT_OPTS (#8100) --- .../integration-test/src/test/scala/ScriptTest.scala | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/launcher-package/integration-test/src/test/scala/ScriptTest.scala b/launcher-package/integration-test/src/test/scala/ScriptTest.scala index 222987887..a14f8a97c 100644 --- a/launcher-package/integration-test/src/test/scala/ScriptTest.scala +++ b/launcher-package/integration-test/src/test/scala/ScriptTest.scala @@ -208,6 +208,17 @@ object SbtScriptTest extends SimpleTestSuite with PowerAssertions { ) } + // Regression test for https://github.com/sbt/sbt/issues/8100 + // Debug agent output in SBT_OPTS should not break the launcher on Windows + makeTest( + "sbt with debug agent in SBT_OPTS", + sbtOpts = "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=12346" + )("-v") { out: List[String] => + assert( + out.contains[String]("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=12346") + ) + } + makeTest("sbt --no-share adds three system properties")("--no-share") { out: List[String] => assert(out.contains[String]("-Dsbt.global.base=project/.sbtboot")) assert(out.contains[String]("-Dsbt.boot.directory=project/.boot"))