From 21a9996b099d994d1d1217208ecdee73e5d2ca2b Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 25 Aug 2025 05:16:10 -0400 Subject: [PATCH] fix: Java-only tests **Problem** managedScalaInstance := false fails Java-only tests because the test runner is based on a Scala Runner and sbt 2.x currently derives the ScalaInstance only from update. **Solution** For the purpose of Java-only testing, create a dummy Scala Instance. --- .../main/scala/sbt/internal/Compiler.scala | 22 +++++++++++++++++-- .../cache-resolver/{pending => test} | 0 .../deliver-artifacts/{pending => test} | 0 .../test-artifact/{pending => test} | 0 .../java/no-scala-tool/{pending => test} | 0 .../sbt-test/tests/junit-java-only/build.sbt | 2 ++ .../src/test/java/com/example/ATest.java | 9 ++++++++ .../src/sbt-test/tests/junit-java-only/test | 2 ++ sbt-app/src/sbt-test/tests/junit/build.sbt | 2 +- 9 files changed, 34 insertions(+), 3 deletions(-) rename sbt-app/src/sbt-test/dependency-management/cache-resolver/{pending => test} (100%) rename sbt-app/src/sbt-test/dependency-management/deliver-artifacts/{pending => test} (100%) rename sbt-app/src/sbt-test/dependency-management/test-artifact/{pending => test} (100%) rename sbt-app/src/sbt-test/java/no-scala-tool/{pending => test} (100%) create mode 100644 sbt-app/src/sbt-test/tests/junit-java-only/build.sbt create mode 100644 sbt-app/src/sbt-test/tests/junit-java-only/src/test/java/com/example/ATest.java create mode 100644 sbt-app/src/sbt-test/tests/junit-java-only/test diff --git a/main/src/main/scala/sbt/internal/Compiler.scala b/main/src/main/scala/sbt/internal/Compiler.scala index 6731f4a13..52eb9a25f 100644 --- a/main/src/main/scala/sbt/internal/Compiler.scala +++ b/main/src/main/scala/sbt/internal/Compiler.scala @@ -19,14 +19,32 @@ object Compiler: val sh = Keys.scalaHome.value val app = Keys.appConfiguration.value val sv = Keys.scalaVersion.value + val managed = Keys.managedScalaInstance.value sh match case Some(h) => scalaInstanceFromHome(h) case _ => val scalaProvider = app.provider.scalaProvider - scalaInstanceFromUpdate + if !managed then emptyScalaInstance + else scalaInstanceFromUpdate } - // use the same class loader as the Scala classes used by sbt + /** + * A dummy ScalaInstance for Java-only projects. + */ + def emptyScalaInstance: Def.Initialize[Task[ScalaInstance]] = Def.task { + makeScalaInstance( + "0.0.0", + Array.empty, + Seq.empty, + Seq.empty, + Keys.state.value, + Keys.scalaInstanceTopLoader.value, + ) + } + + // Use the same class loader as the Scala classes used by sbt + // This will fail for "doc" task https://github.com/sbt/sbt/issues/7725 + // because Scala 3 uses ScalaDocTool configuration to manage doc tools. def optimizedScalaInstance( sv: String, scalaProvider: ScalaProvider diff --git a/sbt-app/src/sbt-test/dependency-management/cache-resolver/pending b/sbt-app/src/sbt-test/dependency-management/cache-resolver/test similarity index 100% rename from sbt-app/src/sbt-test/dependency-management/cache-resolver/pending rename to sbt-app/src/sbt-test/dependency-management/cache-resolver/test diff --git a/sbt-app/src/sbt-test/dependency-management/deliver-artifacts/pending b/sbt-app/src/sbt-test/dependency-management/deliver-artifacts/test similarity index 100% rename from sbt-app/src/sbt-test/dependency-management/deliver-artifacts/pending rename to sbt-app/src/sbt-test/dependency-management/deliver-artifacts/test diff --git a/sbt-app/src/sbt-test/dependency-management/test-artifact/pending b/sbt-app/src/sbt-test/dependency-management/test-artifact/test similarity index 100% rename from sbt-app/src/sbt-test/dependency-management/test-artifact/pending rename to sbt-app/src/sbt-test/dependency-management/test-artifact/test diff --git a/sbt-app/src/sbt-test/java/no-scala-tool/pending b/sbt-app/src/sbt-test/java/no-scala-tool/test similarity index 100% rename from sbt-app/src/sbt-test/java/no-scala-tool/pending rename to sbt-app/src/sbt-test/java/no-scala-tool/test diff --git a/sbt-app/src/sbt-test/tests/junit-java-only/build.sbt b/sbt-app/src/sbt-test/tests/junit-java-only/build.sbt new file mode 100644 index 000000000..f83e939f8 --- /dev/null +++ b/sbt-app/src/sbt-test/tests/junit-java-only/build.sbt @@ -0,0 +1,2 @@ +libraryDependencies += "com.github.sbt" % "junit-interface" % "0.13.2" % Test +managedScalaInstance := false diff --git a/sbt-app/src/sbt-test/tests/junit-java-only/src/test/java/com/example/ATest.java b/sbt-app/src/sbt-test/tests/junit-java-only/src/test/java/com/example/ATest.java new file mode 100644 index 000000000..45923a214 --- /dev/null +++ b/sbt-app/src/sbt-test/tests/junit-java-only/src/test/java/com/example/ATest.java @@ -0,0 +1,9 @@ +package com.example; + +import org.junit.Test; + +public final class ATest { + @Test + public void testSomething() { + } +} diff --git a/sbt-app/src/sbt-test/tests/junit-java-only/test b/sbt-app/src/sbt-test/tests/junit-java-only/test new file mode 100644 index 000000000..6b91dcb10 --- /dev/null +++ b/sbt-app/src/sbt-test/tests/junit-java-only/test @@ -0,0 +1,2 @@ +> test +> doc diff --git a/sbt-app/src/sbt-test/tests/junit/build.sbt b/sbt-app/src/sbt-test/tests/junit/build.sbt index 92bce8545..cadc5cdae 100644 --- a/sbt-app/src/sbt-test/tests/junit/build.sbt +++ b/sbt-app/src/sbt-test/tests/junit/build.sbt @@ -1 +1 @@ -libraryDependencies += "com.novocode" % "junit-interface" % "0.8" % "test" +libraryDependencies += "com.github.sbt" % "junit-interface" % "0.13.2" % Test