2013-07-10 13 views
11

Czy możesz mi powiedzieć, dlaczego sbt compile nie kopiuje niezarządzanych zasobów do ścieżki klas? Z drugiej strony robi to sbt package. W wyniku tego, że nie można uruchomić debugowanie chyba powołać package wezwanie ręcznie :(Dlaczego kompilacja sbt nie kopiuje niezarządzanych zasobów do ścieżki klas?

Używam SBT 0.12.1

Poniżej jest moje 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

co zwróci 'show compile: unmanaged-resource-katalogi'? – 4lex1v

+0

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

+1

Nie możesz po prostu użyjesz 'src/main/resources/webapp', który byłby domyślnie włączony? –

Odpowiedz

16

Zadaniem compile jest kompilacja źródeł, więc zwykle nie ma nic wspólnego z przetwarzaniem zasobów, ale zasoby muszą znajdować się w katalogu klas dla: run, package, test, console i innych elementów, które używają fullClasspath. fullClasspath łączące exportedProducts, które są klasami i zasobami wygenerowanymi przez bieżący projekt, oraz dependencyClasspath, które są wpisami ścieżki klasy z zależności.

Właściwe rozwiązanie zależy od tego, jakie zasoby są potrzebne. Z poziomu wiersza komend uruchom exported-products, aby wykonać compile, a także copy-resources. Programowo zazwyczaj będziesz zależał od fullClasspath lub exportedProducts.

Na marginesie można zwykle dowiedzieć się, jakie zadania wykonuje się przy użyciu numeru the inspect command.

Powiązane problemy