From 4561db0a58053ffebaf2830fbed13f5b9eb8fb1f Mon Sep 17 00:00:00 2001 From: Christopher Vogt Date: Mon, 13 Feb 2017 08:25:31 -0500 Subject: support for flat classloader and enhanced resources example --- examples/resources-example/Main.scala | 22 ++++++++++++++++++ examples/resources-example/build/build.scala | 21 ++++------------- examples/resources-example/build/build/build.scala | 20 ---------------- examples/resources-example/my-resources/foo.text | 1 - .../resources-example/parent/build/build.scala | 12 ++++++++++ .../parent/build/build/build.scala | 20 ++++++++++++++++ .../resources-example/parent/my-resources/foo.text | 1 + examples/resources-example/parent/package.scala | 6 +++++ .../resources-example/parent/parent/package.scala | 6 +++++ .../resources-example/parent/resources/foo.text | 1 + examples/resources-example/resources/foo.text | 1 - examples/resources-example/src/Main.scala | 27 ---------------------- 12 files changed, 72 insertions(+), 66 deletions(-) create mode 100644 examples/resources-example/Main.scala delete mode 100644 examples/resources-example/build/build/build.scala delete mode 100644 examples/resources-example/my-resources/foo.text create mode 100644 examples/resources-example/parent/build/build.scala create mode 100644 examples/resources-example/parent/build/build/build.scala create mode 100644 examples/resources-example/parent/my-resources/foo.text create mode 100644 examples/resources-example/parent/package.scala create mode 100644 examples/resources-example/parent/parent/package.scala create mode 100644 examples/resources-example/parent/resources/foo.text delete mode 100644 examples/resources-example/resources/foo.text delete mode 100644 examples/resources-example/src/Main.scala (limited to 'examples') diff --git a/examples/resources-example/Main.scala b/examples/resources-example/Main.scala new file mode 100644 index 0000000..f0c8e1b --- /dev/null +++ b/examples/resources-example/Main.scala @@ -0,0 +1,22 @@ +package cbt.example.resources +import scala.collection.JavaConverters._ +import java.nio.file.{Files, Paths} +object Main{ + def getResource = Option(getClass.getClassLoader.getResource("foo.text")) + def getResources = getClass.getClassLoader.getResources("foo.text").asScala.toList + + def main( args: Array[String] ): Unit = { + println("Reading parent's resources") + println("") + // resources are in the parent + println("via child: " + getResource.nonEmpty + " " + getResources.size ) + println("") + // this one is where the resources are + println("via parent: " + parent.getResource.nonEmpty + " " + parent.getResources.size ) + println("") + // parent is parent.parent's child. reading children's resources only works + // with a flat classloader in cbt. Try `override def flatClassLoader = true`. + // or `cbt runFlat` when extending `DynamicOverrides` + println("via parent.parent: " + parent.parent.getResource.nonEmpty + " " + parent.parent.getResources.size ) + } +} diff --git a/examples/resources-example/build/build.scala b/examples/resources-example/build/build.scala index aec5d79..b95863d 100644 --- a/examples/resources-example/build/build.scala +++ b/examples/resources-example/build/build.scala @@ -1,21 +1,8 @@ import cbt._ -class Build(val context: Context) extends BaseBuild{ - /* +class Build(val context: Context) extends DynamicOverrides{ override def dependencies = - super.dependencies ++ // don't forget super.dependencies here - Seq( - // source dependency - DirectoryDependency( projectDirectory ++ "/subProject" ) - ) ++ - Resolver( mavenCentral ).bind( - // CBT-style Scala dependencies - ScalaDependency( "com.lihaoyi", "ammonite-ops", "0.5.5" ) - MavenDependency( "com.lihaoyi", "ammonite-ops_2.11", "0.5.5" ) - - // SBT-style dependencies - "com.lihaoyi" %% "ammonite-ops" % "0.5.5" - "com.lihaoyi" % "ammonite-ops_2.11" % "0.5.5" + super.dependencies ++ // don't forget super.dependencies here for scala-library, etc. + Seq( + DirectoryDependency( projectDirectory ++ "/parent" ) ) - */ - override def resourceClasspath = super.resourceClasspath ++ ClassPath(Seq(projectDirectory ++ "/my-resources")) } diff --git a/examples/resources-example/build/build/build.scala b/examples/resources-example/build/build/build.scala deleted file mode 100644 index f700060..0000000 --- a/examples/resources-example/build/build/build.scala +++ /dev/null @@ -1,20 +0,0 @@ -import cbt._ -class Build(val context: Context) extends BuildBuild{ - /* - override def dependencies = - super.dependencies ++ // don't forget super.dependencies here - Seq( - // source dependency - DirectoryDependency( projectDirectory ++ "/subProject" ) - ) ++ - Resolver( mavenCentral ).bind( - // CBT-style Scala dependencies - ScalaDependency( "com.lihaoyi", "ammonite-ops", "0.5.5" ) - MavenDependency( "com.lihaoyi", "ammonite-ops_2.11", "0.5.5" ) - - // SBT-style dependencies - "com.lihaoyi" %% "ammonite-ops" % "0.5.5" - "com.lihaoyi" % "ammonite-ops_2.11" % "0.5.5" - ) - */ -} diff --git a/examples/resources-example/my-resources/foo.text b/examples/resources-example/my-resources/foo.text deleted file mode 100644 index f82e417..0000000 --- a/examples/resources-example/my-resources/foo.text +++ /dev/null @@ -1 +0,0 @@ -Hello from a resource in my-resources/ (the additional location manually added here in build.scala) diff --git a/examples/resources-example/parent/build/build.scala b/examples/resources-example/parent/build/build.scala new file mode 100644 index 0000000..f04ab40 --- /dev/null +++ b/examples/resources-example/parent/build/build.scala @@ -0,0 +1,12 @@ +import cbt._ +class Build(val context: Context) extends BaseBuild{ + override def dependencies = + super.dependencies ++ // don't forget super.dependencies here + Seq( + DirectoryDependency( projectDirectory ++ "/parent" ) + ) + + override def resourceClasspath = super.resourceClasspath ++ ClassPath( + Seq(projectDirectory ++ "/my-resources") + ) +} diff --git a/examples/resources-example/parent/build/build/build.scala b/examples/resources-example/parent/build/build/build.scala new file mode 100644 index 0000000..f700060 --- /dev/null +++ b/examples/resources-example/parent/build/build/build.scala @@ -0,0 +1,20 @@ +import cbt._ +class Build(val context: Context) extends BuildBuild{ + /* + override def dependencies = + super.dependencies ++ // don't forget super.dependencies here + Seq( + // source dependency + DirectoryDependency( projectDirectory ++ "/subProject" ) + ) ++ + Resolver( mavenCentral ).bind( + // CBT-style Scala dependencies + ScalaDependency( "com.lihaoyi", "ammonite-ops", "0.5.5" ) + MavenDependency( "com.lihaoyi", "ammonite-ops_2.11", "0.5.5" ) + + // SBT-style dependencies + "com.lihaoyi" %% "ammonite-ops" % "0.5.5" + "com.lihaoyi" % "ammonite-ops_2.11" % "0.5.5" + ) + */ +} diff --git a/examples/resources-example/parent/my-resources/foo.text b/examples/resources-example/parent/my-resources/foo.text new file mode 100644 index 0000000..f82e417 --- /dev/null +++ b/examples/resources-example/parent/my-resources/foo.text @@ -0,0 +1 @@ +Hello from a resource in my-resources/ (the additional location manually added here in build.scala) diff --git a/examples/resources-example/parent/package.scala b/examples/resources-example/parent/package.scala new file mode 100644 index 0000000..cbd4d8f --- /dev/null +++ b/examples/resources-example/parent/package.scala @@ -0,0 +1,6 @@ +package cbt.example.resources.parent +import scala.collection.JavaConverters._ +object `package`{ + def getResource = Option(getClass.getClassLoader.getResource("foo.text")) + def getResources = getClass.getClassLoader.getResources("foo.text").asScala.toList +} diff --git a/examples/resources-example/parent/parent/package.scala b/examples/resources-example/parent/parent/package.scala new file mode 100644 index 0000000..8d40851 --- /dev/null +++ b/examples/resources-example/parent/parent/package.scala @@ -0,0 +1,6 @@ +package cbt.example.resources.parent.parent +import scala.collection.JavaConverters._ +object `package`{ + def getResource = Option(getClass.getClassLoader.getResource("foo.text")) + def getResources = getClass.getClassLoader.getResources("foo.text").asScala.toList +} diff --git a/examples/resources-example/parent/resources/foo.text b/examples/resources-example/parent/resources/foo.text new file mode 100644 index 0000000..6d7c85a --- /dev/null +++ b/examples/resources-example/parent/resources/foo.text @@ -0,0 +1 @@ +Hello from a resource in resources/ (the default location) diff --git a/examples/resources-example/resources/foo.text b/examples/resources-example/resources/foo.text deleted file mode 100644 index 6d7c85a..0000000 --- a/examples/resources-example/resources/foo.text +++ /dev/null @@ -1 +0,0 @@ -Hello from a resource in resources/ (the default location) diff --git a/examples/resources-example/src/Main.scala b/examples/resources-example/src/Main.scala deleted file mode 100644 index 3bc0943..0000000 --- a/examples/resources-example/src/Main.scala +++ /dev/null @@ -1,27 +0,0 @@ -import java.nio.file.{Files, Paths} -object Main extends App { - // Be aware that CBT currently isolates classloaders of dependencies - // your dependencies will not see the resources of your project - // This means that e.g. spray will not see a application.conf in your project's - // resources/ directory. See https://github.com/cvogt/cbt/issues/176 - println( - "foo.text in resources contains: " ++ - new String( - Files.readAllBytes( - Paths.get( getClass.getClassLoader.getResource("foo.text").getFile ) - ) - ) - ) - import scala.collection.JavaConverters._ - println( - "foo.text in resources and my-resources:\n" ++ - getClass.getClassLoader.getResources("foo.text").asScala.map( - resource => - new String( - Files.readAllBytes( - Paths.get( resource.getFile ) - ) - ) - ).mkString - ) -} -- cgit v1.2.3