Why sbt compile doesn't copy unmanaged resources to classpath?

sbt, scala, scala-2.10

Solution

The job of `compile` is to compile sources, so it won't typically do anything related to processing resources. However, the resources need to be in the class directory for `run`, `package`, `test`, `console`, and anything else that uses the `fullClasspath`. This is done by `fullClasspath` combining `exportedProducts`, which are the classes and resources generated by the current project, and `dependencyClasspath`, which are the classpath entries from dependencies.

The appropriate solution depends on what needs the resources. From the command line, run `exported-products` to do a `compile` as well as `copy-resources`. Programmatically, you will typically want to depend on `fullClasspath` or `exportedProducts`.

As a side note, you can typically find out what tasks do what using the inspect command.

Problem

Could you tell me why `sbt compile` doesn't copy unmanaged resources to classpath? On the other hand `sbt package` does. As result I can't start debugging unless I invoke `package` call manually :( I'm using SBT 0.12.1 Below is my build.sbt. ``` import AssemblyKeys._ // put this at the top of the file net.virtualvoid.sbt.graph.Plugin.graphSettings assemblySettings organization := "com.zzz" version := "0.1" scalaVersion := "2.10.2" scalacOptions := Seq("-unchecked", "-language:reflectiveCalls,postfixOps,implicitConversions", "-deprecation", "-feature", "-encoding", "utf8") unmanagedResourceDirectories in Compile <++= baseDirectory { base => Seq( base / "src/main/webapp" ) } jarName in assembly := "zzz.jar" mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => { case "rootdoc.txt" => MergeStrategy.discard case x => old(x) } } mainClass in assembly := Some("com.zzz.Boot") name := "zzz" // disable using the Scala version in output paths and artifacts crossPaths := false artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) => artifact.name + "." + artifact.extension } resolvers ++= Seq( "spray repo" at "http://repo.spray.io/" ) libraryDependencies ++= { val sprayVersion = "1.2-M8" val akkaVersion = "2.2.0-RC1" Seq( "io.spray" % "spray-servlet" % sprayVersion withSources(), "io.spray" % "spray-can" % sprayVersion withSources(), "io.spray" % "spray-routing" % sprayVersion withSources(), "com.typesafe.akka" %% "akka-actor" % akkaVersion, "org.eclipse.jetty" % "jetty-webapp" % "8.1.7.v20120910" % "container", "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container" artifacts Artifact("javax.servlet", "jar", "jar"), "net.sourceforge.htmlcleaner" % "htmlcleaner" % "2.2", "org.apache.httpcomponents" % "httpclient" % "4.2.3", "org.apache.commons" % "commons-lang3" % "3.1", "org.mongodb" %% "casbah" % "2.6.0", "com.romix.scala" % "scala-kryo-serialization" % "0.2-SNAPSHOT", "org.codehaus.jettison" % "jettison" % "1.3.3", "com.osinka.subset" %% "subset" % "2.0.1", "io.spray" %% "spray-json" % "1.2.5" intransitive() ) } seq(Revolver.settings: _*) seq(webSettings: _*) seq(Twirl.settings: _*) ```

Original source