【问题标题】:Copy a single dependency jar into a folder via build.sbt通过 build.sbt 将单个依赖 jar 复制到文件夹中
【发布时间】:2014-07-24 08:40:24
【问题描述】:

stage 任务期间,我希望sbtivy 存储库中获取newrelic jar 并将其复制到文件夹中。理想情况下,jar 的配置方式与依赖项相同,但不一定在 libraryDependencies Seq 本身内(因为它不是构建或运行时依赖项)。

【问题讨论】:

  • jar 应该复制到哪个文件夹?它应该在项目内部吗?
  • 是的!我只想将它复制到项目根目录下一个名为 newrelic 的文件夹中。该文件夹已经存在(因为它将包含newrelic.yml,它将保留在源代码存储库中(不过,我不想将 jar 与源代码一起存储)。

标签: scala jar build sbt newrelic


【解决方案1】:

您可以声明一个新配置Stage。您可以在该配置中将 libraryDependencies 设置为所需的值。稍后您的stage 任务可以读取更新报告并将文件复制到所需的目录。

val stage = taskKey[Unit]("Stage task")

val Stage = config("stage")

val root = project.in(file(".")).configs(Stage).settings( inConfig(Stage)(Classpaths.ivyBaseSettings): _* )

libraryDependencies in Stage := Seq("com.newrelic.agent.java" % "newrelic-api" % "3.7.0")

stage := {
  (update in Stage).value.allFiles.foreach { f =>
    IO.copyFile(f, baseDirectory.value / f.getName)
  }
}

您可以查看一个工作示例in my github repository

【讨论】:

  • 谢谢。出现编译错误 - 这让我感到困惑,因为根据 sbt 文档,这个 val 应该存在:``` [error] /Users/bloo/Workspace/myapp/project/Build.scala:11: value ivyBaseSettings is不是对象 sbt.Classpaths [error] val root = project.in(file(".")).configs(NewRelic).settings(inConfig(NewRelic)(Classpaths.ivyBaseSettings): _*) ``
  • 你使用的是 sbt 0.13.5 吗?
  • @bloo 只是一个说明,如果你使用的是旧版本的 sbt,你很可能不得不使用 Classpaths.baseSettings 而不是 Classpaths.ivyBaseSettings
  • 不幸的是,当我将此 sn-p 应用到较大的 build.sbt 文件时,libraryDependencies 的集合要大得多,stage 任务会将所有其他全局依赖项的所有 jar 复制到目标目录,并且 newrelic-api.jar 不会包含在其中。似乎libraryDependencies in Stage 没有充分地将这个任务的依赖项与其他依赖项分开。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 2015-05-12
相关资源
最近更新 更多