2013-07-10 2 views
11

Не могли бы вы мне объяснить, почему sbt compile не копирует неуправляемые ресурсы в classpath? С другой стороны sbt package делает. В результате я не могу начать отладку, если я не вызвать package вызов вручную :(Почему sbt compile не копирует неуправляемые ресурсы в classpath?

Я использую SBT 0.12.1

Ниже мой 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: _*) 
+0

Что делает 'show compile: неуправляемые ресурсы-каталоги' возвращается? – 4lex1v

+0

@AlexIv '[info] List (C: \ work \ sideprojects \ courierapp \ server \ src \ main \ resources, C: \ work \ sideprojects \ courierapp \ server \ src \ main \ webapp)' – expert

+1

Разве вы не можете просто используйте 'src/main/resources/webapp', который будет включен по умолчанию? –

ответ

16

Работа compile заключается в том, чтобы скомпилировать источники, поэтому обычно это не связано с обработкой ресурсов. Однако ресурсы должны находиться в каталоге классов для run, package, test, console и всего остального, что использует fullClasspath. fullClasspath, объединяющий exportedProducts, которые являются классами и ресурсами, генерируемыми текущим проектом, и dependencyClasspath, которые являются записями классов из зависимостей.

Соответствующее решение зависит от потребностей ресурсов. В командной строке запустите exported-products, чтобы сделать compile, а также copy-resources. Программно, вы, как правило, хотите зависеть от fullClasspath или exportedProducts.

В качестве побочного примечания вы можете, как правило, узнать, какие задачи делают с использованием the inspect command.

Смежные вопросы