2013-07-10 10 views
11

Potrebbe dirmi perché lo sbt compile non copia le risorse non gestite in classpath? D'altra parte lo fa sbt package. Come risultato non posso avviare il debug a meno che io invoco package chiamata :(manualmentePerché compilare sbt non copia le risorse non gestite in classpath?

sto usando SBT 0.12.1

Qui di seguito è la mia 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

cosa restituisce "mostra compilazione: directory non gestite-risorse"? – 4lex1v

+0

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

+1

Non puoi semplicemente usa 'src/main/resources/webapp' che verrebbe incluso di default? –

risposta

16

Il lavoro di compile è quello di compilare le fonti, quindi in genere non fa nulla relativo alle risorse di elaborazione.Tuttavia, le risorse devono essere nella directory di classe per run, package, test, console e qualsiasi altra cosa che utilizza lo fullClasspath. fullClasspath combinazione di exportedProducts, che sono le classi e le risorse generate dal progetto corrente e dependencyClasspath, che sono le voci del percorso di classe dalle dipendenze.

La soluzione appropriata dipende da ciò che richiede le risorse. Dalla riga di comando, eseguire exported-products per fare un compile e copy-resources. A livello di programmazione, in genere si desidera dipendere da fullClasspath o exportedProducts.

Come nota a margine, in genere è possibile scoprire quali attività eseguire ciò che utilizza the inspect command.

Problemi correlati