Reputation: 30145
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: _*)
Upvotes: 11
Views: 8646
Reputation: 7019
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.
Upvotes: 19