From 731e666603b35b9409b0529788467e529dc50b2b Mon Sep 17 00:00:00 2001 From: eugene yokota Date: Mon, 3 Aug 2026 00:24:41 -0400 Subject: [PATCH] [2.x] fix: Fixes AccessDeniedException issue on Windows (#9538) **Problem** When test classloader holds on to the JAR file, Windows gets AccessDefinedException on packageBin. **Solution** Flip the default to close the test class loader. --- main/src/main/scala/sbt/internal/ClassLoaders.scala | 10 +++++----- main/src/main/scala/sbt/internal/SysProp.scala | 2 +- .../close-run/src/main/scala/Main.scala | 13 ------------- .../src/sbt-test/classloader-cache/close-run/test | 1 - 4 files changed, 6 insertions(+), 20 deletions(-) delete mode 100644 sbt-app/src/sbt-test/classloader-cache/close-run/src/main/scala/Main.scala delete mode 100644 sbt-app/src/sbt-test/classloader-cache/close-run/test diff --git a/main/src/main/scala/sbt/internal/ClassLoaders.scala b/main/src/main/scala/sbt/internal/ClassLoaders.scala index fcd315834..60d04f79d 100644 --- a/main/src/main/scala/sbt/internal/ClassLoaders.scala +++ b/main/src/main/scala/sbt/internal/ClassLoaders.scala @@ -224,11 +224,11 @@ private[sbt] object ClassLoaders { scalaReflectLayer, () => new ReverseLookupClassLoaderHolder( - allDependencies, - scalaReflectLayer, - close, - allowZombies, - logger + classpath = allDependencies, + parent = scalaReflectLayer, + closeThis = close, + allowZombies = allowZombies, + logger = logger, ) ) } else scalaReflectLayer diff --git a/main/src/main/scala/sbt/internal/SysProp.scala b/main/src/main/scala/sbt/internal/SysProp.scala index 17c19c10b..41369c245 100644 --- a/main/src/main/scala/sbt/internal/SysProp.scala +++ b/main/src/main/scala/sbt/internal/SysProp.scala @@ -132,7 +132,7 @@ object SysProp: */ lazy val color: Boolean = ITerminal.isColorEnabled - def closeClassLoaders: Boolean = getOrFalse("sbt.classloader.close") + def closeClassLoaders: Boolean = getOrTrue("sbt.classloader.close") def fileCacheSize: Long = SizeParser(System.getProperty("sbt.file.cache.size", "128M")).getOrElse(128L * 1024 * 1024) diff --git a/sbt-app/src/sbt-test/classloader-cache/close-run/src/main/scala/Main.scala b/sbt-app/src/sbt-test/classloader-cache/close-run/src/main/scala/Main.scala deleted file mode 100644 index a3964a2b3..000000000 --- a/sbt-app/src/sbt-test/classloader-cache/close-run/src/main/scala/Main.scala +++ /dev/null @@ -1,13 +0,0 @@ -object Main { - class Foo - - def main(args: Array[String]): Unit = { - new Thread { - override def run(): Unit = { - Thread.sleep(500) - try new Foo - catch { case t: Throwable => sys.exit(1) } - } - }.start() - } -} diff --git a/sbt-app/src/sbt-test/classloader-cache/close-run/test b/sbt-app/src/sbt-test/classloader-cache/close-run/test deleted file mode 100644 index 9e4c2371c..000000000 --- a/sbt-app/src/sbt-test/classloader-cache/close-run/test +++ /dev/null @@ -1 +0,0 @@ -> run \ No newline at end of file