diff --git a/sbt/src/sbt-test/classloader-cache/resources/build.sbt b/sbt/src/sbt-test/classloader-cache/resources/build.sbt new file mode 100644 index 000000000..fbc057785 --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/build.sbt @@ -0,0 +1,5 @@ +resolvers += "Local Maven" at (baseDirectory.value / "libraries" / "foo" / "ivy").toURI.toURL.toString + +libraryDependencies += "sbt" %% "foo-lib" % "0.1.0" + +libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % "test" diff --git a/sbt/src/sbt-test/classloader-cache/resources/changes/UpdatedResourceTest.scala b/sbt/src/sbt-test/classloader-cache/resources/changes/UpdatedResourceTest.scala new file mode 100644 index 000000000..b1b13145e --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/changes/UpdatedResourceTest.scala @@ -0,0 +1,9 @@ +package scripted + +import org.scalatest.FlatSpec + +class ResourceTest extends FlatSpec { + "test resources" should "load" in { + Main.main(Array("bar.txt", "updated-test")) + } +} diff --git a/sbt/src/sbt-test/classloader-cache/resources/changes/updated-main.txt b/sbt/src/sbt-test/classloader-cache/resources/changes/updated-main.txt new file mode 100644 index 000000000..d53f0341f --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/changes/updated-main.txt @@ -0,0 +1 @@ +updated-main \ No newline at end of file diff --git a/sbt/src/sbt-test/classloader-cache/resources/changes/updated-test.txt b/sbt/src/sbt-test/classloader-cache/resources/changes/updated-test.txt new file mode 100644 index 000000000..e0f0eebab --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/changes/updated-test.txt @@ -0,0 +1 @@ +updated-test \ No newline at end of file diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/build.sbt b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/build.sbt new file mode 100644 index 000000000..b73c67d27 --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/build.sbt @@ -0,0 +1,11 @@ +name := "foo-lib" + +organization := "sbt" + +publishTo := Some(Resolver.file("test-resolver", file("").getCanonicalFile / "ivy")) + +version := "0.1.0" + +classLoaderLayeringStrategy := ClassLoaderLayeringStrategy.Dependencies + +Test / classLoaderLayeringStrategy := ClassLoaderLayeringStrategy.Dependencies diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-javadoc.jar b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-javadoc.jar new file mode 100644 index 000000000..276995bb9 Binary files /dev/null and b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-javadoc.jar differ diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-javadoc.jar.md5 b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-javadoc.jar.md5 new file mode 100644 index 000000000..a1d5ac6db --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-javadoc.jar.md5 @@ -0,0 +1 @@ +9bab3dca3e061fdbbff2419ef0eee90d \ No newline at end of file diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-javadoc.jar.sha1 b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-javadoc.jar.sha1 new file mode 100644 index 000000000..4ee36a1b4 --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-javadoc.jar.sha1 @@ -0,0 +1 @@ +11081018ca6824226893b153fe439d3a94e23286 \ No newline at end of file diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-sources.jar b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-sources.jar new file mode 100644 index 000000000..e445add15 Binary files /dev/null and b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-sources.jar differ diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-sources.jar.md5 b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-sources.jar.md5 new file mode 100644 index 000000000..3fad0add4 --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-sources.jar.md5 @@ -0,0 +1 @@ +afba811024a110dc47734c6d9ec0eb5b \ No newline at end of file diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-sources.jar.sha1 b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-sources.jar.sha1 new file mode 100644 index 000000000..b2a820350 --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0-sources.jar.sha1 @@ -0,0 +1 @@ +e4e1b37d77060a77ab20c508df90cdae6125f3bc \ No newline at end of file diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.jar b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.jar new file mode 100644 index 000000000..e2441bf60 Binary files /dev/null and b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.jar differ diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.jar.md5 b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.jar.md5 new file mode 100644 index 000000000..7acfc2da3 --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.jar.md5 @@ -0,0 +1 @@ +6de1cfe8548a007ac08763ab5f051e08 \ No newline at end of file diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.jar.sha1 b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.jar.sha1 new file mode 100644 index 000000000..e60d8daff --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.jar.sha1 @@ -0,0 +1 @@ +f25267dfe760e734ea4f8a00b8dc6ace477589d6 \ No newline at end of file diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.pom b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.pom new file mode 100644 index 000000000..a340da7e4 --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.pom @@ -0,0 +1,20 @@ + + + 4.0.0 + sbt + foo-lib_2.12 + jar + foo-lib + 0.1.0 + foo-lib + + sbt + + + + org.scala-lang + scala-library + 2.12.8 + + + \ No newline at end of file diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.pom.md5 b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.pom.md5 new file mode 100644 index 000000000..70f55bc4e --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.pom.md5 @@ -0,0 +1 @@ +b83994a1d5ecfc3d6ff71021649e342d \ No newline at end of file diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.pom.sha1 b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.pom.sha1 new file mode 100644 index 000000000..b005d6129 --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/ivy/sbt/foo-lib_2.12/0.1.0/foo-lib_2.12-0.1.0.pom.sha1 @@ -0,0 +1 @@ +6b2c0b4d69ed8e10e0221db841e0f1fdeef12780 \ No newline at end of file diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/project/build.properties b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/project/build.properties new file mode 100644 index 000000000..c66f82ead --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/project/build.properties @@ -0,0 +1 @@ +sbt.version=1.3.0-RC1 diff --git a/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/src/main/scala/resource/Resource.scala b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/src/main/scala/resource/Resource.scala new file mode 100644 index 000000000..9793cd8a0 --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/libraries/foo/src/main/scala/resource/Resource.scala @@ -0,0 +1,19 @@ +package resource + +import java.net.URL +import java.nio.file._ +import java.util.Collections + +object Resource { + def readFile(url: URL): String = { + val uri = url.toURI + val fileSystem = + if (uri.getScheme != "jar") None + else Some(FileSystems.newFileSystem(uri, Collections.emptyMap[String, Object])) + try new String(Files.readAllBytes(Paths.get(uri))) + finally fileSystem.foreach(_.close()) + } + def getStringResource(name: String): String = { + readFile(Resource.getClass.getClassLoader.getResource(name)) + } +} diff --git a/sbt/src/sbt-test/classloader-cache/resources/src/main/resources/foo.txt b/sbt/src/sbt-test/classloader-cache/resources/src/main/resources/foo.txt new file mode 100644 index 000000000..88d050b19 --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/src/main/resources/foo.txt @@ -0,0 +1 @@ +main \ No newline at end of file diff --git a/sbt/src/sbt-test/classloader-cache/resources/src/main/scala/scripted/Main.scala b/sbt/src/sbt-test/classloader-cache/resources/src/main/scala/scripted/Main.scala new file mode 100644 index 000000000..61b2fb6c9 --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/src/main/scala/scripted/Main.scala @@ -0,0 +1,10 @@ +package scripted + +import resource.Resource + +object Main { + def main(args: Array[String]): Unit = { + val Array(resource, expected) = args + assert(Resource.getStringResource(resource) == expected) + } +} diff --git a/sbt/src/sbt-test/classloader-cache/resources/src/test/resources/bar.txt b/sbt/src/sbt-test/classloader-cache/resources/src/test/resources/bar.txt new file mode 100644 index 000000000..30d74d258 --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/src/test/resources/bar.txt @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/sbt/src/sbt-test/classloader-cache/resources/src/test/scala/scripted/ResourceTest.scala b/sbt/src/sbt-test/classloader-cache/resources/src/test/scala/scripted/ResourceTest.scala new file mode 100644 index 000000000..980fd37bc --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/src/test/scala/scripted/ResourceTest.scala @@ -0,0 +1,9 @@ +package scripted + +import org.scalatest.FlatSpec + +class ResourceTest extends FlatSpec { + "test resources" should "load" in { + Main.main(Array("bar.txt", "test")) + } +} diff --git a/sbt/src/sbt-test/classloader-cache/resources/test b/sbt/src/sbt-test/classloader-cache/resources/test new file mode 100644 index 000000000..57e1f61f5 --- /dev/null +++ b/sbt/src/sbt-test/classloader-cache/resources/test @@ -0,0 +1,15 @@ +> run foo.txt main + +$ copy-file changes/updated-main.txt src/main/resources/foo.txt + +> run foo.txt updated-main + +> test + +$ copy-file changes/updated-test.txt src/test/resources/bar.txt + +-> test + +$ copy-file changes/UpdatedResourceTest.scala src/test/scala/scripted/ResourceTest.scala + +> test \ No newline at end of file