问题 为什么sbt compile不会将非托管资源复制到classpath?


你能告诉我原因吗? sbt compile 不会将非托管资源复制到classpath?另一方面 sbt package 确实。因此,除非我调用,否则无法启动调试 package 手动打电话:(

我正在使用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: _*)

10238
2017-07-10 09:01


起源

是什么 show compile:unmanaged-resource-directories 回报? - 4lex1v
@AlexIv [info] List(C:\work\sideprojects\courierapp\server\src\main\resources, C:\work\sideprojects\courierapp\server\src\main\webapp) - expert
你不能只使用 src/main/resources/webapp 哪个会默认包括在内? - 0__


答案:


的工作 compile 是编译源代码,因此它通常不会执行与处理资源相关的任何事情。但是,资源需要在类目录中 runpackagetestconsole,以及其他任何使用它的东西 fullClasspath。这是通过 fullClasspath 结合 exportedProducts,这是当前项目生成的类和资源,以及 dependencyClasspath,它们是依赖项的类路径条目。

适当的解决方案取决于资源需求。从命令行运行 exported-products 做一个 compile 以及 copy-resources。以编程方式,您通常希望依赖 fullClasspath 要么 exportedProducts

作为旁注,您通常可以找出使用哪些任务 检查命令


16
2017-07-10 20:02